AI時代のDocker + XaaS簡単理解

私が所属しているDeNA AI システム部の部内勉強会で Docker と XaaS(ザース)の話をさせていただいたので資料を公開します。
XaaS(ザース)は IaaS, FaaS, SaaS などの総称です。

資料は大きく「Docker 編」と「XaaS 編」から成っており、普段業務でなんとなく Docker やクラウド(IaaS)を使っている方向けに、これらの概要を説明する資料となっています。

部内向けということもありいくつかの項目を省略しましたので、この記事で補足します。

前提と聴衆

まず部内では自明なこととして資料中では聴衆の関心事やスキルセットを端折っていますが以下のような方を対象としています。

  • Docker を使用する必要/関心がある
  • IaaS(クラウド)を使用する必要/関心がある
  • 機械学習等で GPU の計算リソースを必要としている
  • (Web)アプリケーションエンジニア ではない
  • DevOps や ML Ops ではない

つまり部内の大勢を占める AI リサーチャーやデータサイエンティストの方を対象として作った資料です。
また、5 月ということもあり新卒入社してくださったメンバーが部内に多くいることも考慮に入れています。

本資料を発表した部内勉強会は事前にトピックが公開されている任意参加の社内イベントで、当日は概ね 30 名の方が参加してくださいました。

意識したこと

スライドの最初の方にスクリーンショットを貼っていますが、今回の資料を作るにあたって AI リサーチャー/データサイエンティストの方に「Docker にどれくらい慣れ親しんでいるか」事前アンケートを取らせていただきました。

このアンケート結果から、部内に「Docker に慣れている方」から「Docker を自分では使ったことがない方」まで幅広く存在していることを改めて認識しました。

このような聴衆が想定される中、特に今回は「Docker よくわからない」と感じている方の"よくわからなさ"をポイントを絞って解消したいと考えました。

例えば設定例やコマンドラインオプションは今後 Slack や Issue コメントでサポートできますしチートシートのリンクを紹介して試していただくこともできます。

しかしエンジニア組織において「そもそもの仕組みや考え方がわからない」状態は健全ではなく、AI リサーチャーやデータサイエンティスト間でのコードレビューの障害となり得ます。
個々人としてはよくわからないまま使うことで頭の中のワーキングメモリを無為に消費し続け苦手意識を持ち続けてしまうこともあるでしょう。

一方で、AI リサーチャー/データサイエンティストの皆さんが Docker や IaaS を深く知る必要はないためマニアックな内容にならないよう気をつけました。

また IaaS については私のような DevOps/ML Ops エンジニアが環境構築や仕組みの提供を行えるため概要紹介に留めました。

Docker 編

アンケート結果から Docker を使いこなしている方が半数程度居り「隣の人に聞ける」状況ではあることが読み取れたため、「Docker とは何か」といった全く初めての人向けの話は端折りました。

また Web サービスの開発のように複数 Docker コンテナを同時実行するよりは、個々の Docker コンテナで Jupyter Notebook などを起動するケースが多いと想定しネットワークに関しても触れていません。

代わりに普段意識する機会の少ないであろうコンテナの概要を説明することで、今後"Docker on Mac(=Linux)と macOS で同じファイルを参照した際の OS の違いによるハマり"などに遭遇しても解決しやすくなるよう構成を考えました。

Dockerfile

Docker イメージをビルドするためのレシピとなるDockerfileは「存在と役割は知られている、あるいは周りの方がサポート可能」と判断し説明しませんでした。

これは社内の GitHub Enterprise を検索したところ、AI リサーチャーやデータサイエンティストの方が主に commit しているリポジトリに既に多くの Dockerfile が存在したことによります。

Docker Compose

一方で複数 Docker コンテナの管理ツールである Docker Compose は Dockerfile ほどには設定ファイルが存在せず、また普段の Slack 上の会話などからも「興味はあるが使っていない」「使い方や使い所がよくわからない」といった声があり、導入が進んでいないことを把握していました。

そのため極めて単純な例から順に内容を増やしていくサンプルを用意しました。
そのサンプルはこちらのリポジトリで公開しています。

201905.note.brief-description-of-docker-and-xaas-in-the-ai-era/sample-files

Docker ベストプラクティス

また Docker ビルド時のベストプラクティスを、パフォーマンスとセキュリティそれぞれの観点から全員に押さえていただきたいポイントに厳選してご説明しました。

1 つは Dockerfile の書き方によってイメージサイズを増やさない方法です。

これは 1 行ずつ複数の RUN が書かれた Dockerfile をいくつか目にしたためです。

どうしても機械学習関連の Docker イメージはサイズが大きくなる傾向があり、今後ますます Docker の活用が進んだ際にストレージコストは無視できなくなる可能性があるため今のうちに共通認識を持っていただきたいと考えました。

もう 1 つは BuildKit の --mount=type=secret の使い方と効果の説明です。

業務上 GitHub の Private Repository や Amazon S3、Google Cloud Storage にアクセスするための秘密鍵や Credentials を取り扱うことは多々あり、Docker ビルド時に必要となるケースも増えていくと想定されます。

Docker の新しい builder である BuildKit では、Docker ビルド時にこれらの秘匿すべきデータを安全に取り扱うことができるので「もしそうしなかったらどう危険なのか」とともに紹介しました。

時間が足りずデモはできなかったのですが、サンプルリポジトリに例があります

当日は以上 2 つのベストプラクティスのみ紹介しましたが、こちらの資料に 2019 年 5 月時点のベストプラクティスがまとまっています。
この資料は「Container Build Meetup #02」に参加した際教えていただきました 😄

また Google Cloud の「Best practices for building containers」もとても良いドキュメントだと思います。
当日も参加いただいた部内の若者が Slack に貼ってくれていました 😄

XaaS(ザース)編

XaaS については言葉の整理をしつつ、AWS 上で GPU インスタンスを起動して Docker Compose を使って Docker コンテナを動かすデモを行いました。

先述の通り、部内では AI リサーチャー/データサイエンティストの方が AWS や GCP 上の込み入ったインフラを構築する必要はないため、以下のようなポイントに絞って説明したいと考えました。

  • IaaS, FaaS, SaaS など「* as a Service」に種類があり名前がついていること
  • XaaS、特に IaaS は便利であると同時に危険性が伴うこと
  • 部内の環境は Infrastructure as Code(IaC)という考え方で構成されていること

ただ、時間をオーバーしてしまい最後はかなり駆け足になってしまいました。

デモ環境の構成

デモでは次のような極めてシンプルな AWS 上の機械学習インフラを使いました。

この環境を作るサンプルは次のリポジトリで公開しています。

terraform-aws-simple-vpc/examples/simple-ml

Infrastructure as Code(IaC)を実現するツールはTerraformのみを使っており、サンプルは Terraform Module になっています。

また Terraform を実行時に IP アドレスを取得し接続元として AWS のセキュリティグループ(ファイアウォール)を設定することで、業務でよく使われるであろう接続元 IP アドレスによるアクセス制御を実現しています。

Terraform 実行は数分程度の時間がかかりますし、内容の詳細を知っていただきたい訳ではなかったため事前に 2 倍速の動画として用意しておきました。
YouTube に同じ動画をアップロードしています。

AWS アカウントを 1 つ用意してこのサンプルを適用していただくと、README の最後のように TensorFlow が使える Jupyter Notebook が起動でき、Docker コンテナ上からも nvidia-smi コマンドで GPU が接続されていることを確認できるはずです。

もちろん業務で扱っている環境はもう少し複雑な作りになっているのですが、社内独自の作り込みなどは検索しても情報が得られないため、あくまで一般に公開されている情報とツールを使ってデモ環境を構成しています。

反応

今回話をさせていただいた部内勉強会は、普段は機械学習やデータサイエンスのトピックが多くこの内容は話す側としてとても不安でした。

終了後にアンケートを取らせていただいたのですが、思ったよりも「参考になった」と回答してくださった方が多く準備した甲斐がありました。

「使ってみようと思った」と「自分でもやってみようと思った」は後から追加したのですが、すでに多くの方が回答済みだったからか 1 票も入らずでした。。

参考資料

最後に今回の資料の構成検討と制作にあたっては参考にさせていただいた資料を紹介します。

初めて Docker を触るところからマンガで説明されており、初心者の方の入門書としてはもちろん、導入や表現も大変勉強になりました。

#マンガでわかる Docker ③ 〜AWS 編〜まで読むと Amazon ECS 上で Docker コンテナを動かす方法まで一通り学べます。

Docker がどのような技術で成り立っているか、Linux を含めて開設されている書籍です。
2015 年に出版された本ですが Linux Namespaces 等の主要機能は大きく変わっておらず変わらず参考になります。