みなさん、こんにちは。
フジミック技術スタッフのAです。
(AIに興味あり・業務ではクラウドを担当しています)
今回はこれまで自前で構築したオンプレ環境やPC上で動かしていた機械学習の処理をAWS Batchで動かすまでの道のりです。
さらにただ環境を作るだけだと面白くないので構築した環境で昨年末話題になったOpenAIのWhisperを使って音声ファイルの文字起こしを実装します。
少し長くなるので5回に分けて出来るだけ分かりやすく説明していきたいと思います。
1. コンテナ作成用実行環境準備(Cloud9+Docker+GPU環境)
2. 文字起こし用のDockerfileとdocker-compose.ymlの設定とCloud9上でのコンテナ内でのプログラム実行
3. コンテナをdocker pushでAWSで使える状態にする
4. AWS Batchの設定とジョブ実行してみる
5. StepFunctionを使ってS3と連携してみる
今回の内容は「1.コンテナ作成用実行環境準備(Cloud9+Docker+GPU環境)」です。
仕事で実施した際はDeep Learning Base AMIを利用してg4dn.xlargeインスタンスを起動でやってましたが、今回はCloud9で実施していきます。
Cloud9といっても中身はほぼEC2なのでEC2インスタンスが起動されます。
ちょっとCloud9でGPU環境が設定ができるのか不安ですが試しながら進めていきます。
■Cloud9設定〜起動
・マネージメントコンソールのサービスからCloud9を選択
・Aws Cloud9のメインページで"Create environment"を選択
・Detailsの設定
[Name]→名前は何でも良いです。
[Envroiment Type]→New EC2 instanceを選択
・New EC2 instanceの設定
[Instance type]→"t2.micro"を選択(インスタンス起動後変更します)
[Platform]→"Ubuntu Server 18.04 LTS"を選択
Configure settings 画面にて、Platform を"Ubuntu Server 18.04 LTS" を選択しました。Ubuntu Server 18.04 LTSのサーバ上のDockerコンテナでUbuntu Server 20.04 LTSがGPUを認識できるのかも検証していきます。
■EC2の設定変更
Cloud9で作成したインスタンスをEC2のコンソール画面から停止して、GPU環境構築のためのインスタンスタイプ変更とストレージのボリューム拡張を行います。
・EC2のコンソール画面のから、インスタンスの状態→インスタンスの停止
・インスタンスタイプの変更 t2.micro→g4dn.xlarge
・ボリュームの拡張 10GB→30GB
■nvidia-driverとNVIDIA Container Toolklitのインストール
$ sudo apt install ubuntu-drivers-common
$ ubuntu-drivers devices
== /sys/devices/pci0000:00/0000:00:1e.0 ==<br>modalias : pci:v000010DEd00001EB8sv000010DEsd000012A2bc03sc02i00<br>vendor : NVIDIA Corporation
driver : nvidia-driver-515-server - distro non-free
driver : nvidia-driver-470 - distro non-free recommended
driver : nvidia-driver-418-server - distro non-free
driver : nvidia-driver-470-server - distro non-free
driver : nvidia-driver-525-server - distro non-free
driver : nvidia-driver-450-server - distro non-free
driver : xserver-xorg-video-nouveau - distro free builtin
・recommendedを選択
$ sudo apt-get install nvidia-driver-470
・再起動
$ sudo reboot
・GPUが表示できることを確認
$nvidia-smi
・NVIDIA Container Toolklitをインストール
$ distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
$ curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -$ curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
$ sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit
$ sudo systemctl restart docker
(エラーが出た場合、以下のコマンドを実行)
$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys (環境に応じたkeyを入力)
・Dockerコンテナ内でもGPUが認識できるかnvidiaが提供しているイメージを取得して確認
$docker pull nvidia/cuda:11.6.2-cudnn8-devel-ubuntu20.04
$docker run --gpus all nvidia/cuda:11.6.2-cudnn8-devel-ubuntu20.04 nvidia-smi
GPUが認識できることを確認
ここで取得したイメージを後で使い同じことをdocker-composeできるようにしていきます
・docker-composeの最新版をインストール
(※apt install docker-composeだとバージョンが古くてdocker runtimeに非対応のため入れ直しました)
$ sudo curl -SL https://github.com/docker/compose/releases/download/v2.15.1/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
$ sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose<br>$ sudo chmod +x /usr/local/bin/docker-compose
・バージョン確認(新しいバージョンがインストールされていることを確認)
$ docker-compose -v
Docker Compose version v2.15.1
docker-composeでコンテナを構築する場合--gpusオプションがが利用できないので、nvidia-container-runtimeをインストールし、/etc/docker/daemon.jsonに設定ファイルを作成する
AWS Batchでも同様に--gpusオプションがが利用できないので、AWS BatchでGPUを使うためにはdocker-composeを使用する必要あり(他の方法あるのかもしれませんが)
・nvidia-container-runtimeのインストール
$sudo apt install nvidia-container-runtime
・追加の手順
$ sudo apt-get install nvidia-docker2
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker
(参考 https://qiita.com/cinchan/items/0706f19c67eb30e0954f)
上記サイトを参考に設定ファイルに以下の通り記述する
$sudo nano /etc/docker/daemon.json
"default-runtime": "nvidia", (※この1行を追加)
これにてdocker-composeでruntime: nevoid オプションが指定できるようになります。
(docker-compose.ymlに"runtime:nvidia"を追記可能に)
■GPUが認識しているか確認用のDockerfileとdocker-compose.ymlファイル生成
・
・Dockerfileファイル
・docker-compose.yml
・dockerコンテナをBuild(ビルド)
$docker-compose up -d --build
・起動したプロセスの確認
$docker ps
・docker内に入ってみる
$docker exec -it checkGPU_container bash
・入れたらGPUが認識しているか確認
$nvidia-smi
$ nvcc -V
無事、表示できました。
環境構築手順の説明はいつも長くなるのがモドカシイ...
ここからはEC2インスタンスで実施した手順でいけるはず。
次回はDockfileとdocker-compose.ymlに実際に文字起しをするための設定追加と
Cloud9上のコンテナ内で文字起こしを行い、出力結果を確認するところまでをやっていきます。
最後までありがとうございました。
また#2でお会いしましょう。