はじめに
株式会社晴工雨読の片山と申します。晴工雨読の概要はこちらからご覧ください。
Techブログ第2弾は、Weights & Biases (W&B)とさくらインターネットの高火力DOKを組み合わせて、機械学習を効率的に実行する方法を解説していきます。まずそれぞれのツールの概要を、その後実際の手順をハンズオン形式で述べていきます。
WandB(Weights & Biases)とは
正式名称をWeights & Biases、よくWandBと書いて「ワンドビー」とよばれているのを見聞きします。WandBは、機械学習の実験管理や可視化、モデルの管理をサポートするツール(ライブラリ)です。個人利用や小規模プロジェクトであれば、無料で利用できます。
今回は公式ドキュメントから、Kerasを利用した機械学習を例に進めていきます。WandBの基本的な使い方も知ることができますので、ぜひご一読ください。Colab Notebookも用意されています。
さくらインターネットの高火力DOK(ドック)とは
高火力DOKは、さくらインターネットが提供するコンテナサービスです。高性能GPUが従量課金制かつ比較的低価格で利用できる点が特徴のようです。今回はこのサービスを利用していきます。
実行手順
1. Dockerイメージを作成
任意のディレクトリの中に4つのファイルを配置し、Dockerコマンドを利用して実行確認します。今回はprojectディレクトリと命名したディレクトリにファイルを配置しました。まずは、それぞれのファイルの内容を解説していきます。
project
├─ Dockerfile
├─ requirements.txt
├─ tutorial.py
└─ .env
今回は、DockerイメージをDockerfileで作成することにしました。ここはファイル内のコメントに解説を記しています。
# ベースイメージとしてPython 3.9を使用
FROM python:3.9-slim
# 作業ディレクトリを作成
WORKDIR /app
# requirements.txtとローカルのPythonファイルをコンテナ内にコピー
COPY ./requirements.txt /app/
COPY ./tutorial.py /app/
# 必要なパッケージをインストール
RUN pip install --no-cache-dir -r requirements.txt
# デフォルトの実行コマンド
CMD ["python", "tutorial.py"]
コンテナに作成されるPython環境の中に、必要なパッケージ(ライブラリ)を入れていくための環境情報ファイルを作成します。今回はWandBとKerasを利用するのに必要なパッケージをインストールします。
wandb==0.15.5
tensorflow==2.12.0
tensorflow_datasets==4.8.2
実行するPythonファイルは、公式ドキュメントにあるColab Notebookをダウンロードして編集したものを利用します。手順は次のとおりです。
- 公式ドキュメントのColab Notebook(ipynbファイル)をPythonファイルとしてダウンロード
- ダウンロード時のファイル名が
use_wandbmetriclogger_in_your_keras_workflow.py
と長いのでtutorial.py
と変更 - コードの中で
!pip install -qq -U wandb
はColab Notebookで使用する部分なのでコメントアウト
最後に環境変数ファイルです。ここには、WandBで取得したAPIキーを記載します。(GitHub等、一般に公開しないようご注意ください。)
WANDB_API_KEY=<ここにAPIキーを記載>
2. ローカル環境にて実行確認
ファイルを配置したディレクトリに入り、Dockerコマンドを利用して実行確認します。1行目でイメージを作成し、それを利用して2行目でコンテナを起動します。
$ docker build -t myapp:latest .
$ docker run --env-file .env myapp
WandBの画面を見てみましょう。「My Projects」から正常に実行できているのが確認できます。ここでは最終結果を載せていますが、実際は1エポックごとに結果がリアルタイムで更新されていきます。
3. Docker Hubへイメージをアップロード
ローカルでの実行確認が完了したので、Docker Hubへイメージをアップロードして高火力DOKで実行する準備をしていきます。
ローカル環境にて実行確認した時と同じ階層で、まずDocker(Docker Hub)にログイン後、イメージをビルドし、タグづけ、そしてプッシュを行います。yourusername
にはユーザ名を、yourimagename
には任意のイメージ名を入れてください。
$ docker login
$ docker buildx create --use
$ docker buildx build --platform linux/amd64,linux/arm64 -t yourusername/yourimagename:latest --push .
docker buildx
コマンドについて補足ですが、今回はマルチプラットフォームイメージというものを作成しています。これは私のデバイスがMacbookであることから、そのほかの環境でも正常に起動するためです。詳細な内容は参考文献からご確認ください。
ここまでの工程を経て作成したイメージは一般公開していますので、これまでの手順を踏まずに次の手順から試すことも可能です。
4. 高火力DOKでDockerイメージを実行
ではいよいよ、高火力DOKでDockerイメージを実行していきます。
ログイン後、「タスク」タブ(赤枠①)から「新規作成」を選択し、イメージ(赤枠②)に前の手順でアップロードしたイメージのイメージ名とタグを、環境変数(赤枠③)にはローカル環境で.envファイルに記載していたWandBのAPIキーを、それぞれ入れます。
今回は、先ほどのイメージを利用するので、このような内容になります。環境変数は半角英数字のものが入ります。「作成」を押すと、実行が開始されます。このとき、ローカル環境で実行確認したWandBの画面を確認すると、同様な結果を見ることができます。
実行が完了すると、タスクの「詳細」から、実行ログを確認することができます。
さらに、WandBのダッシュボードからログファイルをダウンロードすることが可能です。高火力DOKのタスクの「詳細」内にある「アーティファクト」からファイルを出力させることも可能ですが、ここでは割愛します。
おわりに
今回は、機械学習の便利ツールWandBと従量課金制のコンテナサービス高火力DOKを組み合わせて使ってみました。WandBは他にもさまざまな機能を持っているようなので、今後ハックしていきたいと思います。クラウドサービスも、使い倒してみると効率的な開発ができそうでわくわくしますね。