カレーちゃんブログ

Kaggleや競技プログラミングなどのこと

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

他の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のインストールは完了

f:id:currypurin:20201204161557p:plain

次に、ドライバーを入れます。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())

こんな感じに表示されました。 f:id:currypurin:20201204161636p:plain

通常使うツールの導入

ここはお好みで自分が使うのを入れたら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月版の記事を書くときにでも書きたいです。