他のwebサービスで公開していましたが、そのサービスが終了したので、移動し公開しました。
この記事では、Kaggleの画像コンペ用にGCPでGPU付きのインスタンスをたてて、使えることを目指す記事です。 これまでGCEを使ったことがある人が、次のような環境をコピペで構築できると思います。 GCPを全く使ったことがない人はこれだと難しいと思うので、もう少し作業手順がまとまったらまた書きたい。
- DockerとMarketplaceを使わない
- Cudaは手動で入れる
- GPUはP100を選択
- Anacondaを使う
インスタンスの作成
GCEの画面から、インスタンスを作ります。
- 好きなリージョンでGPUはNVIDIA Tesla P100を選択
- 私はUbuntu16.04LTSを選んでいます(他のOSイメージを選択する場合は、一部修正な箇所があると思う)
- ディスクはそれなりのサイズを選ぶ
- IDとAPIへのアクセスでは、「各APIにアクセス権を設定」を選び「ストレージ」の項目で「フル」を選択
- プリエンプティブを選択する場合は、この段階で、「管理、セキュリティ、ディスク、ネットワーク、単一テナンシー」から選択
Cudaを入れる
ここからはsshでログインし、ターミナルから入力 https://cloud.google.com/compute/docs/gpus/add-gpus?hl=ja の「GPU ドライバを手動でインストールする」の箇所に書いてあるコマンドでcuda10.0を入れる。コマンドは以下。
curl -O http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_10.0.130-1_amd64.deb sudo dpkg -i cuda-repo-ubuntu1604_10.0.130-1_amd64.deb sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/7fa2af80.pub sudo apt-get update sudo apt-get install cuda-10-0 nvidia-smi
最後のnvidia-smiで次のような画面が表示されたらCudaのインストールは完了
次に、ドライバーを入れます。GCPを使ってubuntu上でpytorchを使うまでに色々大変だったので記録しておく | シストレとkaggleの備忘録が詳しいのでみると良いでしょう。コマンドは以下のとおり
# リポジトリを更新 sudo add-apt-repository ppa:graphics-drivers/ppa sudo apt-get update # version418のドライバーをインストール sudo apt-get install nvidia-418 # 再起動 sudo reboot
cudaとdriverの確認。
anacondaとpytorchを入れて、cudaが問題なく入ったか確認します。
wget https://repo.anaconda.com/archive/Anaconda3-2019.07-Linux-x86_64.sh bash Anaconda3-2019.07-Linux-x86_64.sh source ~/.bashrc conda install=1.2.0 pytorch torchvision cudatoolkit=10.1 -c pytorch
次のコードを動かして、errorがでなければok
import torch nums = torch.randn(2,2) print(nums.cuda())
こんな感じに表示されました。
通常使うツールの導入
ここはお好みで自分が使うのを入れたらok。私はこんな感じです。
sudo apt install git tmux build-essential unzip sudo add-apt-repository ppa:kelleyk/emacs sudo apt-get update sudo timedatectl set-timezone Asia/Tokyo sudo apt-get install emacs25 sudo apt-get install python-pip pip install kaggle pip install opencv-python conda install -c conda-forge imgaug conda install albumentations -c albumentations pip install japanize-matplotlib pip install git+https://github.com/qubvel/segmentation_models.pytorch git clone https://github.com/NVIDIA/apex cd apex pip install -v --no-cache-dir --global-option="--cpp_ext" --global-option="--cuda_ext" ./
jupyter notebookの設定
jupyter notebookは使えるようにしておいたほうが何かと楽。 この記事(jupyter notebookの導入)のように、しておくと新しくインスタンスをたてた時もすぐに設定できる。
kaggle apiの設定
kaggle-apiというKaggle公式のapiの使い方をまとめます - kaggle全力でやりますを参考に、jsonファイルを~/.kaggleに設定する。
ストレージ(バケット)の設定
チェックポイントや、コードなどは、ストレージに置いておくと他のインスタンスからもマウントして自由にアクセスできとても便利です。ローカルへのダウンロードもGUIでできるし環境を選ばないので良い。 この記事(GCEとGCSを接続)を参考に設定しましょう
(注)画像(コンペで配布されるzipファイルやそれを解凍したjpgファイル等)をストレージに置いてしまうと、解凍さえできないくらい遅いです。 画像は、インスタンス側におくか、pickleなどに固めてストレージにおくなどします。
export GCSFUSE_REPO=gcsfuse-`lsb_release -c -s` echo "deb http://packages.cloud.google.com/apt $GCSFUSE_REPO main" | sudo tee /etc/apt/sources.list.d/gcsfuse.list curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - sudo apt-get update sudo apt-get install gcsfuse
vscodeの設定
vscodeからGCEにアクセスできるようにしておくと、とても便利です。 VSCode+RemoteDevelopment+GCEでリモート開発環境を構築する。 - Qiitaを参考に設定しましょう。
まとめ
自分ように、作業メモをまとめました。 こうした方が便利とかあれば、教えてもらえるとありがたいです。
この作業をdockerでするようになったらどれぐらい便利になるかも知りたいところ。
追記
「pipとcondaが混在しているので、事故率が上がるのでは?」とのコメントをもらいました。 確かにその通りなので、全てpipに統一した方が良さそうです。 2019年11月版の記事を書くときにでも書きたいです。