BETA

Kaggleの画像コンペのためのGCPインスタンス作成手順(2019年10月版)

投稿日:2019-10-11
最終更新:2019-11-14

この記事では、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月版の記事を書くときにでも書きたいです。

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

@currypurinの技術ブログ

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう