だいぶ期間が空いてしまいましたが、結構前にGoogle Cloud Platformの使い方を勉強していました。 (別に諦めてたわけではなく、単純にAWSでいろいろやることがあったので、そっちを使ってただけです)
当初の目的としては、GPUを使ってDeep Learningをサクサク回していきたいという意図でした。 今回は手元のコードをGCPのGPUを使って学習するまでにやったことのメモです。
環境構築
簡単な方法は大きく分けて2通りあって、
ですね。
その他、自前でツールインストールしても良いんですが、この時代ですしDockerで良いんじゃないかと。 楽できるところは楽していく主義なので。。。
公式のVMはお手軽に使えるのでいいですね。(正直GPUが使えればなんでもいい。。。) どこでも同じ環境を作りたい人(複数環境対応のサービスを提供する場合とか?)だとNVIDIA-Dockerを用意するのが良さそうです。
その他、注意点としては、GPUが使用できないリージョンがある点です。
<参考url>
GPUs on Compute Engine | Compute Engine Documentation | Google Cloud
距離が近く、レイテンシの小さい東京リージョンではGPUは残念ながら利用できません。 記載のあるリージョンでインスタンスを立てて使用してください。
Google公式のVMを使用
公式ページはこちら。
指示に従って4~5回クリックすればインスタンスの出来上がりです。 すごい簡単です。GCPだけ使うならこのやり方一択だと思います。
あんまり良くわかってませんが、インスタンスできちゃいましたし。
NVIDIA-Dockerを使ってDockerコンテナ内からGPUを操作できるようにする
上のやり方を見たあとだとちょっと面倒ではありますが、環境をどこでも統一できるという意味では良いのではないでしょうか。 用途によりけりですが、個人的にはこちらで進めたいと思います。
nvidia-dockerはこちらから使用できます。
GPUを使用する設定
GPU割当申請
複数GPUを使用したい方はGPUの割当申請をします。 デフォルトで1つはGPUが使えるようなので、一つでいい方はこちらは読み飛ばしてください。
「IAMと管理」 >「 割り当て」 から指標で好きなGPUを選択して表示します。
チェックを付けて「割り当てを編集」で申請を出せます。 あんまり数が多いと英語でメールのやり取りが必要になるようですが、2~3つなら設定完了のメールを待てばOKのようです。
インスタンスの作成
プロジェクトの作成
GCPにのコンソールから適当な名前でプロジェクトを作成して下さいませ。
インスタンスの作成
GCPコンソール > 「Compute Engine」 > 「VMインスタンス」> 「作成」でインスタンスを作成します。
今回は試しに
でやってみます。
CUDAのインストール
大本のインスタンスにCUDAをインストールします。
やり方はこちらを参考にdeb(network)でインストールしました。
https://qiita.com/yukoba/items/4733e8602fa4acabcc35
NVIDIA Dockerのインストール
基本的にはgithubに書いてあるとおりにしていただければ問題ないかと。
https://github.com/NVIDIA/nvidia-docker
一応こんな感じで打ちました。
# NVIDIA Driver のインストール sudo apt-get update wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-repo-ubuntu1804_10.0.130-1_amd64.deb sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub sudo dpkg -i cuda-repo-ubuntu1804_10.0.130-1_amd64.deb sudo apt update sudo apt install cuda cuda-drivers sudo reboot export PATH="/usr/local/cuda/bin:$PATH" export LD_LIBRARY_PATH="/usr/local/cuda/lib64:$LD_LIBRARY_PATH" sudo apt install docker.io # NVIDIA Dockerのインストール curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - distribution=$(. /etc/os-release;echo $ID$VERSION_ID) # docker-ceがないと怒られたので暫定対応 sudo apt remove docker docker-engine docker.io sudo apt-get update sudo apt-get install apt-transport-https ca-certificates curl software-properties-common curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable" sudo apt-get update sudo apt-get install docker-ce # nvidia dockerのインストール sudo apt-get install -y nvidia-docker2 sudo pkill -SIGHUP dockerd sudo docker run --runtime=nvidia --rm nvidia/cuda:9.0-base nvidia-smi
動作確認
上のやり方のどちらでやっていただいても大丈夫なんですが、NVIDIA Dockerがちゃんと動いているかの確認をします。
こちらからDockerfileを拝借してきました。
FROM nvidia/cuda:9.0-base-ubuntu16.04 # Install some basic utilities RUN apt-get update && apt-get install -y \ curl \ ca-certificates \ sudo \ git \ bzip2 \ libx11-6 \ && rm -rf /var/lib/apt/lists/* # Create a working directory RUN mkdir /app WORKDIR /app # Create a non-root user and switch to it RUN adduser --disabled-password --gecos '' --shell /bin/bash user \ && chown -R user:user /app RUN echo "user ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/90-user USER user # All users can use /home/user as their home directory ENV HOME=/home/user RUN chmod 777 /home/user # Install Miniconda RUN curl -so ~/miniconda.sh https://repo.continuum.io/miniconda/Miniconda3-4.5.1-Linux-x86_64.sh \ && chmod +x ~/miniconda.sh \ && ~/miniconda.sh -b -p ~/miniconda \ && rm ~/miniconda.sh ENV PATH=/home/user/miniconda/bin:$PATH ENV CONDA_AUTO_UPDATE_CONDA=false # Create a Python 3.6 environment RUN /home/user/miniconda/bin/conda install conda-build \ && /home/user/miniconda/bin/conda create -y --name py36 python=3.6.5 \ && /home/user/miniconda/bin/conda clean -ya ENV CONDA_DEFAULT_ENV=py36 ENV CONDA_PREFIX=/home/user/miniconda/envs/$CONDA_DEFAULT_ENV ENV PATH=$CONDA_PREFIX/bin:$PATH # CUDA 9.0-specific steps RUN conda install -y -c pytorch \ cuda90=1.0 \ magma-cuda90=2.3.0 \ "pytorch=0.4.1=py36_cuda9.0.176_cudnn7.1.2_1" \ torchvision=0.2.1 \ && conda clean -ya # Install HDF5 Python bindings RUN conda install -y h5py=2.8.0 \ && conda clean -ya RUN pip install h5py-cache==1.0 # Install Torchnet, a high-level framework for PyTorch RUN pip install torchnet==0.0.4 # Install Requests, a Python library for making HTTP requests RUN conda install -y requests=2.19.1 \ && conda clean -ya # Install Graphviz RUN conda install -y graphviz=2.38.0 \ && conda clean -ya RUN pip install graphviz==0.8.4 # Install OpenCV3 Python bindings RUN sudo apt-get update && sudo apt-get install -y --no-install-recommends \ libgtk2.0-0 \ libcanberra-gtk-module \ && sudo rm -rf /var/lib/apt/lists/* RUN conda install -y -c menpo opencv3=3.1.0 \ && conda clean -ya # Set the default command to python3 CMD ["python3"]
Python3で確認します。
Python 3.6.5 |Anaconda, Inc.| (default, Apr 29 2018, 16:14:56) [GCC 7.2.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import torch >>> print(torch.cuda.is_available()) True
GPUがちゃんと見えているので、一応ちゃんと動いてるっぽいです。 めでたしめでたし。