Google Cloud Platform

Google Cloud Platform (GCP) は Google のクラウドサービス。仮想マシンを時間借りできるなど,さまざまなサービスが用意されている。

無料で始められるので,Google アカウントで登録する。無料でもクレジットカードの登録が必要。300 ドルの無料枠があるが,それを超えて勝手に課金されることはない。ただ,無料ユーザでは GPU が使えないなどの制限があるので,私は結局有料ユーザにアップグレードしてしまった(いずれにしても 300 ドルは無料になる)。GPU を使っても時間数十円なので,自分でマシンを買うより安い。

登録したら,コンソール から Compute Engine に行き,VM インスタンス(仮想マシン)を作ってみよう。上端の >_ のボタンでブラウザ上のターミナルから操作できるが,反応が遅くてキー入力を取りこぼすので,普通のターミナルを使うほうがよい。そのためには Installing the gcloud CLI に従って gcloud CLI をインストールするか,Mac (M1 を含む) であれば brew install google-cloud-sdk で cask 版を入れる。画面の表示に従って, ~/.zshrc

source /opt/homebrew/Caskroom/google-cloud-sdk/latest/google-cloud-sdk/path.zsh.inc
source /opt/homebrew/Caskroom/google-cloud-sdk/latest/google-cloud-sdk/completion.zsh.inc

と書き込んで source ~/.zshrc するのが推奨らしいが,私はそうせずに単に ~/.zshenv/opt/homebrew/Caskroom/google-cloud-sdk/latest/google-cloud-sdk/bin にパスを通した。これで gcloud コマンドが使えるようになるので,まず

gcloud auth login

と打ち込むと,ブラウザが立ち上がり,認証が行われる。

gcloud compute instances list

で VM のインスタンスのリストが表示されるので確認する。この左端に表示されるインスタンス名で VM にログインできる:

gcloud compute ssh インスタンス名

その場で仮の SSH キーが生成され,ログインできる。あるいは SSH 公開キー(id_ed25519.pub とか)を登録して通常の ssh コマンドで IP アドレス指定でログインすることもできる。

使い終わったら VM を停止または削除しておけば課金が進まない。

GPU を使った VM を作ろうとすると Operation type [insert] failed with message "Quota 'GPUS_ALL_REGIONS' exceeded. Limit: 0.0 globally." というエラーが出る。GPU を使うには申請が必要だった。GCPでできるだけ安くディープラーニングが参考になる。設定は IAM の quota から行う。「フィルタ」の右側に「GPUs (all regions)」と打ち込み,上限が 0 になっていたら,左端にチェックを付けて「割り当てを編集」で設定する。上限 1 で申請したら,即 OK され,15分程度で反映された。

試しに NDLOCR(国会図書館の OCR)を実行してみる。中村覚先生の Google Cloud PlatformのCompute Engineを用いたNDLOCRアプリの実行 の通りにすればよい。この構成で,237.39ドル/月(0.33ドル/時間)。なお,sh ./docker/run_docker.sh の代わりに次のようにした:

docker container run --gpus all -it --rm --mount type=bind,src=$(pwd),dst=/work ocr-cli-py37:latest bash

これは docker コマンドを打ち込んだ場所($(pwd))とコンテナ内の /work ディレクトリをマップするという意味である(ディレクトリは適宜変更する)。

これで

wget https://www.dl.ndl.go.jp/api/iiif/3437686/R0000004/full/full/0/default.jpg -P /work/sample_data/img/
python main.py infer /work/sample_data /work/output_dir -x

とすれば,完了して exit してコンテナが消えた後でも入力や出力にアクセスできる。結果は rsync などでローカルマシンにダウンロードしてから,忘れずに VM を停止する(停止している間は課金されないもほんの少し課金されるようなので,長時間使わないなら削除する)。

[追記] こちらも便利: NDLOCR の 読み順ソート機能