Help us understand the problem. What is going on with this article?

Google Compute Engine で機械学習環境(python,chainer,cupy)を作成して機械学習を行う。その①

はじめに

GCPの登録から機械学習を実行する環境構築までの手順を備忘録としてまとめます。
GCPや機械学習の実行環境について知見を持っている人が社内で少ない為、指摘事項・意見やアドバイスについてコメントをいただければ幸いです。

構築する環境:
・OS    :Ubuntu 18.04
・Boot Disk :Standard Presistent Disk
・GPU    :NVIDIA Tesla V100
・vCPU   :8

GCP に登録する。

以下サイトからGCPのアカウントを登録することができます。
まだ登録していない方は、まずアカウント登録しましょう!
http://cloud.google.com
※アカウント登録する際は有効なクレジットカードが必要になります!

下記の画面が表示されたら、無料で始めるを選択して登録を行なってください。

スクリーンショット 2019-10-05 15.32.51.png

新規プロジェクトの作成

GCPに登録すると以下のようなホーム画面的なものが表示されると思います。
ページ中央付近に「作成」ボタンがあるので、それを選択してください。
gcp_console_dashboard_no_project_ja.png

このような、プロジェクト作成画面が表示されるので、[プロジェクト名][場所]に対して任意の情報を入力してください。個人で利用する場合は[場所]組織なし のままで大丈夫です。
任意の情報を入力したら[作成]を選択してください。

スクリーンショット 2019-10-06 16.47.27.png

VMインスタンスを作成する

google cloud platformのホーム画面の右上にナビゲーションメニューがあるので、それを選択します。
ナビゲーションメニューは、以下のようなマークになってます。
スクリーンショット 2019-10-05 15.41.08.png

ナビゲーションメニューを選択すると以下のように、メニュー画面が表示されますので、
[Compute Engine] -> [VM インスタンスを選択してください]

スクリーンショット 2019-10-05 15.40.03.png

すると以下のようなVM インスタンス作成画面が表示されるので、[作成]を選択。
スクリーンショット 2019-10-05 15.45.51.png

以下のようなVM インスタンスを作成する為の設定画面が表示されます。設定はせずに、あらかじめ用意されたテンプレートを使って作成したいので、左真ん中下にある[Marketplace]を選択してください。
スクリーンショット 2019-10-05 15.47.06.png

[Marketplace]を選択すると様々なVM インスタンスのテンプレートが表示されます。
今回はNVIDIAのGPUを利用した機械学習環境を作成するので、上側にある検索画面で「nvidia」と入力してEnterキーで検索を行なってください。すると、以下のようなVM インスタンス一覧が表示されますが今回は
[NVIDIA GPU Cloud Image for Deep Learning, Data Science, and HPC]
を使って機械学習環境を作成したいと思いますので、それを選択してください。

選択すると以下のような、VM インスタンスの環境情報が表示されるので[COMPUTE ENGIN 上で起動]を選択してください。
スクリーンショット 2019-10-05 16.02.26.png

選択すると以下のようにVM インスタンス作成する為の設定画面が表示されますが、あまりGCPのVM インスタンスを使ったことない方は
「GPUs (all regions) の割り当てを GPU1 個超過しています。割り当てページで割り当てを増やしてください。 詳細」
というエラーが表示されていると思います。
このエラーは、新規アカウント作成時のデフォルト設定では作成できるCPUやGPUなどのリソース数に制限が設けられています。なので、以下のような「Zone」の設定(VM インスタンスを作成するサーバーの場所・地域)に対して、作成できるリソース数を増やす必要があります。今回は、以下のうようなzone「us-west1-a」に対してリソースの設定をしたいと思います。
スクリーンショット 2019-10-05 16.13.43.png

先ほど示したエラー内容「GPUs (all regions) の割り当てを GPU1 個超過しています。割り当てページで割り当てを増やしてください。 詳細」割り当てページと表示されている文字がリソース設定画面のリンクページになっているので、割り当てページを選択。

以下のような割り当てページが表示されるので、一覧表示設定を以下のように設定してください。
・「割り当てのタイプ」:すべての割り当て量
・「サービス」    :すべてのサービス
・「指標」      :GPUs(all regions)
・「場所」      :グローバル
スクリーンショット 2019-10-05 16.29.03.png

[Compute Engine API]のチェックボックスにチェックを入れて、[割り当てを編集]
を選択してください。

以下のように「名前」、「メールアドレス」、「電話番号」について求められるので、各自以下のように自身の名前やメールアドレス、電話番号について入力してください。入力後、[次へ]を選択してください。
スクリーンショット 2019-10-05 16.32.24.png

以下のような、GPU割り当て設定画面が表示されるので、必要な新しい割り当て上限を入力しましょう!
割り当て量を100とかに設定すると、申請が通らない場合もあるみたいなので必要な分だけの記載をしましょう。
今回は[新しい割り当て上限]2[リクエストの説明]の内容を入力して、[リクエストを送信]を選択しましょう。
大体、10分から1時間くらいで申請が通ります。(個人差があります。)
スクリーンショット 2019-10-05 16.34.21.png

すると以下のようにリクエスト送信確認内容が表示されるので、申請が通るまで待ちましょう!

Google Cloud Platform サポートにケース #(ID:0000000)を次の 割り当てについてご送信いただきありがとうございます:
GPUs (all regions) を 0 から 2 に変更
リクエストを処理しています。リクエストの確認メールを送信しますので、不明な点がある場合はこのメールに返信してください。

GPUの割り当て上限の申請が通ったのを確認できたら、VM インスタンス作成設定画面に戻ります。
未だに「GPUs (all regions) の割り当てを GPU1 個超過しています。割り当てページで割り当てを増やしてください。 詳細」と未だに表示されている場合は、ページの更新または、もう一度MarketplaceからVM インスタンスの作成を行なってください。
GPUの割り当て上限変更後、以下のように必要な箇所に対して変更を行なってください。
スクリーンショット 2019-10-06 12.02.23.png

とりあえず私は
・Deployment name :my-first-vm-instance
・Zone :us-west1-b
・Machine type :vCPU x 8
・Boot disk type :Standard Persistent Disk
・Boot disk size in GB:50GB
・そのほかの設定はデフォルトのまま

としました。設定終了後、VM インスタンスを立ち上げましょう!
一番左下に[デプロイ]という項目があるので、それを選択するとVM インスタンスが立ち上がります!

スクリーンショット 2019-10-06 12.12.41.png

デプロイには約3分〜10分かかります。
気長に待ちましょう。デプロイに成功すると以下のような画面になると思います。

スクリーンショット 2019-10-06 12.26.22.png

デプロイされた後、一旦[ナビゲーションメニュー]->[Compute Engine]->[VM インスタンス]を選択してください。

スクリーンショット 2019-10-06 15.10.48.png

VM インスタンス一覧に今作ったVM インスタンスが表示されていると思います。
作ったVMインスタンスを選択してください。
スクリーンショット 2019-10-06 15.14.35.png

作成したVM インスタンスを選択すると以下のような画面が表示されると思います。
真ん中上に[SSH]と書かれた隣に[▼]マークがあるので、それを選択すると以下の図のようにVM インスタンスの接続方法を選ぶことが出来ます。
スクリーンショット 2019-10-06 15.15.44.png

今回は駆け足で環境構築をしたいので、[ブラウザ ウィンドウで開く]を選択します。
すると、ブラウザ上で作成したVM インスタンスにアクセスすることが出来ます!
とりあえずこれで、VM インスタンスの作成は終了です。

デプロイする際に以下のようなエラーが発生した場合。

このエラーは、指定したzone(指定したVMインスタンスを作成するサーバーの地域)ではGPU、CPU、ディスクサイズがすでに一杯なので作成に失敗した際に出るみたいです。多分

スクリーンショット 2019-10-06 12.14.42.png

nvidia-ngc-image でリソース警告が発生しています
my-first-vm-instance-vm: {"ResourceType":"compute.v1.instance","ResourceErrorCode":"ZONE_RESOURCE_POOL_EXHAUSTED","ResourceErrorMessage":"The zone 'projects/planar-abbey-237306/zones/us-west1-b' does not have enough resources available to fulfill the request. Try a different zone, or try again later."}

ですので、zoneを変更して再度VM インスタンスの作成を行うか、時間を空けてから再デプロイを行なってください。

ちなみに私はzoneをasia-east1-cに変更して再度VM インスタンスの作成を行なったらうまくデプロイをすることが出来ました。

GPUを利用するためのCUDAとcuDNNのインストール

CUDAとは、向けのGPUコンピューティング向けの統合開発環境らしいです。
cuDNNとはNVIDIAが公開しているDeep Learning用のライブラリです。このライブラリを使うとCaffeやChainer, TensorFlowなどのDeep Learning用のソフトウェアの速度が向上する。
今回は、その二つをインストールしたいと思います。
CUDAやcuDNNをインストールするにあたって、自分が使う予定の機械学習のライブラリが要求しているcudaやcudnnのバージョンを確認しておきましょう。
特に、TensorFlowが要求するcudaのバージョンは非常にタイトなので、間違えると再インストールするなどの手間がかかります。

以下のサイトからインストールするcudaおよびcudnnのバージョンのURLを確認することが出来ます。
- https://developer.nvidia.com/cuda-toolkit-archive
- https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/

CUDAのインストール

以下のコマンドからCUDAをインストールすることが出来ます。
今回はCUDA10.1をインストールします。
CUDA10.1をインストールする場合はVM インスタンスにログインして、ターミナルに貼り付けて実行してください。

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-repo-ubuntu1804_10.1.105-1_amd64.deb
sudo apt update
sudo apt upgrade
sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub

sudo apt install ./cuda-repo-ubuntu1804_10.1.105-1_amd64.deb
sudo apt update
sudo apt install cuda cuda-drivers

CUDA10.1をインストール後、パスを追加します。

export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH

バスを追加した後に、再起動を行なってください。
以下コマンドから再起動することが出来ます。

sudo reboot

再起動している間はSSH 接続できないので少し待ちましょう

cuDNNのインストール

先ほどインストールしたCUDAのバージョンによって、インストールするcuDNNも変わってきます。自身がインストールしたCUDAのバージョンに合わせてcuDNNのインストールを行なってください。
以下コマンドを実行することでcuda10.1に対応したcuDNNをインストールすることが出来ます。

wget https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/libcudnn7_7.5.0.56-1+cuda10.1_amd64.deb
sudo apt install ./libcudnn7_7.5.0.56-1+cuda10.1_amd64.deb
sudo apt update
sudo apt-get install libcudnn7

これで、cuDNNのインストールは完了です。

Python3と機械学習を行うためのライブラリのインストール

最後にPython3とchainerをはじめとしたライブラリのインストールを行います。
まずは以下コマンドでPython3とライブラリをインストールするためのpipをインストールします。

sudo apt install python3
sudo apt install python3-pip

最後に基本的な機械学習を利用するためのPython3ライブラリをインストールします。

sudo pip3 install numpy matplotlib argparse chainer cupy-cuda101

最後にライブラリchainerとcupyが使用できるかを確認します。
ターミナルでpython3と入力するとpython3用のコマンドラインが呼び出されます。

python3

以下のようにpython3用のコマンドラインが呼び出されたら、chainerとcupyのライブラリを呼び出してエラーが出ないか確認してみましょう。

Python 3.6.8 (default, Aug 20 2019, 17:12:48) 
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import chainer
>>> import cupy
>>> print("hello world")
hello world
>>> exit()

特にエラーが出なければこれで基本的な環境構築は終了です。

ライブラリcupyをインストールする際にハマった点

import cupyでcupyのライブラリを呼び出せるので、
pip3 install cupyでcupyをインストールしようとすると毎回以下のようなエラーが出て上手くいきませんでした。

 ************************************************************
    * CuPy Configuration Summary                               *
    ************************************************************

    Build Environment:
      Include directories: ['/usr/local/cuda/include']
      Library directories: ['/usr/local/cuda/lib64']
      nvcc command       : ['/usr/local/cuda/bin/nvcc']

    Environment Variables:
      CFLAGS          : (none)
      LDFLAGS         : (none)
      LIBRARY_PATH    : (none)
      CUDA_PATH       : (none)
      NVTOOLSEXT_PATH : (none)
      NVCC            : (none)

    Modules:
      cuda      : No
        -> Cannot link libraries: ['cublas', 'cuda', 'cudart', 'cufft', 'curand', 'cusparse', 'nvrtc']
        -> Check your LDFLAGS environment variable.

    ERROR: CUDA could not be found on your system.
    Please refer to the Installation Guide for details:
    https://docs-cupy.chainer.org/en/stable/install.html

    ************************************************************


    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-kaz6xfh4/cupy/

どうやらCUDA 10.1をインストールした場合はcupy-cuda101でライブラリcupyをインストールする必要があるみたいです。
なので、CUDA 10.0をインストールした方はcupy-cuda100でライブラリcupyをインストールする必要があるみたいなので

sudo pip3 install cupy-cuda100

からインストールしてみてください。

作成した環境のスナップショットを作成する。

スナップショットはVM インスタンス(仮想環境)のバックアップみたいなものです。
もし、作成した環境を rm -rf /* などのコマンドを間違って実行してもスナップショットを作成しておくと元の正常な状態に復元することが出来ます。

ナビゲーションメニューから[Compute Engine] -> [スナップショット]を選択してください。

スクリーンショット 2019-10-06 17.23.00.png

スナップショット作成画面が表示されるので、[スナップショットを作成]を選択してください。

スクリーンショット 2019-10-06 17.24.32.png

スナップショット作成をする際の設定画面が表示されるので、[名前][説明][ソースディスク][ロケーション]について設定を行います。
[ソースディスク]は作成したVM インスタンスの名前を選択してください。

スクリーンショット 2019-10-06 17.26.42.png

必要記載事項に情報を入力したら[作成]を選択します。
すると新しくスナップショットが作成されます。

以上で基本的な環境構築は終了です。

まとめ

GCPの登録から機械学習を実行する環境構築まで簡単にまとめてみました。
タイトルで「その①」と書いてある通り、「その②」も書いたいなと思ってます。
「その②」ではGPUを利用して機械学習を実行するためのchainerやcupyの使い方、gpuやcpuの監視方法や機械学習を繰り返し試行するための、スクリプトファイルの作成についてまとめたいと思います。
いいねやコメントを頂けると「その②」の記事作成のやる気が出ます。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした