たけのこブログ

元々腹黒い人が、心を入れ替えて生真面目に発信する。

TellusのGPUサーバからPyTorchの環境を構築する

Tellusとは

宇宙産業を促進するための衛星データプラットフォームとして、Tellusが昨年から始まっています。

Tellus(テルース)は、政府衛星データを利用した新たなビジネスマーケットプレイスを創出することを目的とした、日本初のオープン&フリーな衛星データプラットフォームです。複数のデータをかけ合わせ、新たなビジネス創出を促進するためのあらゆるファンクションを提供します。

本当は始まった当初から解析をゴリゴリやりたかったのですが、当時は研究の実験が物凄く大変で精神的に追い込まれていたので(たった数ヶ月で10キロも増えた)、結局今年の終盤にやる決断ができた次第です。

TellusではTellus OSと呼ばれる操作ツールを用いてJavascriptで衛星画像を切り取って加工してみたり、申請すればjupyterの環境をプラットフォーム内で利用できるので、そこで画像の解析をpythonなどの言語を用いて行うことが可能になっています。

ただ、私の場合ディープなどのそれなりに重い処理を行うことも想定していたので、GPUの高火力コンピューティングの申請をしていました(そして、何週間か待って無事に通りました)。スペックは以下のようになっています。

GPUカード:NVIDIA Tesla V100 for PCI-Express (32GB) ×4
CPU:Xeon E5-2623 v3 4Core×2 (8C/16T 3.0GHz Max3.5GHz)
メモリ:128GB
ディスク(RAID1):SSD 480GB 2台/1組
※お問い合わせ後、個別調整

詳しくは、以下を参考にしてください。環境はUbuntu18.04です。

www.sakura.ad.jp

このスペックがリモートで操作できるのは嬉しいですね。通常なら初期費用で100万は飛んでいきそうな感じです。当初は、申請が通ればこの環境がリモートでタダで使い放題なのかとワクワクが止まりませんでした。

さて、この環境では最初はUbuntuが入っているだけなので、言語環境などのセットアップは自前で行う必要があります。ただ、メールやマイページに記載されていた方法でやるとつまづいたところがあったので、今回は上記の環境からPyTorchのセットアップまでの手順を備忘録として記載したいと思います。

セットアップ手順

ここで行う大まかな手順は以下の通りです。

  • ディープラーニングNVIDIAGPUボードを利用するために以下をインストール
    • CUDA Toolkit
    • GPUボード用ドライバーソフトウェア
    • cuDNNなどのライブラリ
  • anacondaの環境構築
  • PyTorchのインストール

GPUサーバにアクセス

ターミナルを開いて、以下のようにアクセスを行います。申請が通った際の通知メールにログインIDが伝えられるので、それにしたがってssh接続を行います。

$ ssh (メールで送られてきたログインID)@(Tellusのマイページの開発環境利用状況に記載されている環境ホスト名)

パスワードを求められるので、マイページにあるトークン情報を入力すれば接続は完了します。

パッケージのアップデート

# apt update
# apt upgrade

ソフトウェアパッケージのインストール

# apt install build-essential

DKMSのインストール

# apt install dkms

CUDA Toolkitのインストール

次に、搭載されているGPUカードであるNVIDIAを利用するためのToolkitを入手します。ここまではTellusのマイページに記載されている「CUDA Toolkit/GPUカードドライバー導入手順」と同じです。

developer.nvidia.com

しかし、その導入手順に載せてある上の外部ウェブサイトに行くと、CUDA10.2のインストーラーのダウンロード画面に移動してしまいます。PyTorchが現在サポートしているのはCUDA10.1までですし、肝心のTellusの導入手順はCUDA10.0で説明が進んでいます。しかも、なぜかCUDA10.0でインストールができなかったです。こんなエラーが発生しました。

CUDA Installer must be in silent mode to use the toolkit, samples or driver command-line flags. Please also pass -silent to the installer.

ちょっとネットで調べても解決策が出なかったので、PyTorchを入れるのが目的だったのでCUDA10.1を入れることにしました。先ほどの外部ウェブサイトで「Legacy Releases」という項目があり、それをクリックすると過去のリリース版を選べるので、そこにあるCUDA10.1を選択します。その後の選択項目は導入手順の通りで次のようになります。 Operating System: Linux
Architecture: x86_64
Distribution / Version: Ubuntu18.04
Installer Type: runfile [local]

こちらでダウンロードをしたら、SCPなどの手段で高火力GPUサーバーにコピーします。あくまで一例ですが、こんな感じです。

scp -r (ダウンロードしたファイルのパス) (メールで送られてきたログインID)@(マイページに記載されている環境ホスト名):~/

そのあとは、導入手順と全く同じでCUDA Toolkitをインストールします。sudoはつけたと思います。

# chmod +x (ダウンロードしたファイル名)
# ./(ダウンロードしたファイル名) --toolkit --samples --samplespath=/usr/local/cuda-samples --no-opengl-libs

--no-opengl-libsをつける理由としては、OpenGL関連ファイルをインストールすると、X Window Systemベースのデスクトップ環境へのコンソールログインに支障がでることがあるためらしいです。

そして、最後に環境変数を設定するファイルを作成すれば完了です。 /etc/profile.d/cuda.sh

export CUDA_HOME="/usr/local/cuda" 
export PATH="$CUDA_HOME/bin:$PATH" 
export LD_LIBRARY_PATH="/usr/local/lib:$CUDA_HOME/lib64:$LD_LIBRARY_PATH" 
export CPATH="/usr/local/include:$CUDA_HOME/include:$CPATH" 
export INCLUDE_PATH="$CUDA_HOME/include" 

/etc/profile.d/cuda.csh

setenv CUDA_HOME "/usr/local/cuda" 
setenv PATH "$CUDA_HOME/bin:$PATH" 
setenv LD_LIBRARY_PATH "/usr/local/lib:$CUDA_HOME/lib64:$LD_LIBRARY_PATH" 
setenv CPATH "/usr/local/include:$CUDA_HOME/include:$CPATH" 
setenv INCLUDE_PATH "$CUDA_HOME/include" 

やり方はいろいろですが、例えばsudo vi /etc/profile.d/cuda.shとコマンドして、上記の設定をコピペして:wq!で良いでしょう。 最後に設定を反映するため、一同ログアウトしてもう一度サーバーにログインします。

GPUカード用ドライバーのインストール

次に、GPUのカードドライバーをインストールします。これは以下のサイトでダウンロードします。

Download Drivers | NVIDIA

CUDAのToolkitのバージョンだけ10.1なので気をつけて、先ほど載せてあった仕様や導入手順に沿って選んでいけば大丈夫です。

こちらもダウンロードして、ファイルをscpなどの手段でGPUサーバーにコピーすれば大丈夫です。コピーしたら、以下の手順でドライバーをインストールします。

# chmod+x (ダウンロードしたファイル名)
# ./(ダウンロードしたファイル名) --no-opengl-files --no-libglx-indirect --dkms

cuDNNのインストール

最後に、ディープラーニングアルゴリズムを高速化するためのライブラリであるcuDNNをインストールします。

developer.nvidia.com

登録が必要ですが、すぐに終わるのでサクッと登録してダウンロードします。

CUDA10.1のものを選択するといろんなものが出てきますが、「cuDNN Library for Linux」を選択すれば大丈夫です。こちらをクリックしてダウンロードして、先ほどと同じくscpなどで高火力GPUサーバーにコピーします。

# sudo tar -xvzf cudnn-10.1-linux-x64-v7.6.5.32.tar
# sudo mv cuda/include/cudnn.h /usr/local/cuda/include/
# sudo mv cuda/lib64/* /usr/local/cuda/lib64/

これでCUDA関連のインストールは全て終了したので、GPUの状況を確認してみましょう。

$ nvidia-smi

これがうまく起動していればインストールは完了です。

anacondaの環境構築

まず、下記のページに飛んでLinuxを選択してPython3.7 versionのものをDownloadします。

www.anaconda.com

ダウンロードが完了したらscpなどのコマンドでGPUサーバーに転送して、以下のコマンドを実行します。必ず.shファイルが保存されているところで実行するようにしてください。

sudo bash ./Anaconda3-2019.10-Linux-x86_64.sh

無事にインストールが終わると、以下のコマンドが正しく起動すると思いますが

$ conda -V

自分の場合は正しく起動しませんでした。なので、以下のサイトを参考にして、viなどを用いて.bashrcに以下を追加しました。

qiita.com

export PATH=“~/anaconda3/bin:$PATH"

これで先ほどのコマンドが正しく動作しました。

次に、仮想環境を以下のようなコマンドで構築します。pytorchの部分は「環境名」なので、好きな名前で構いません。

conda create -n pytorch Python=3.7 anaconda

そして、アクティベートします。

conda activate pytorch

以下のコマンドで無事に仮想環境が動いているか確認してみてください。

$ conda info -e

ちなみに、その他のコマンドは以下の通りです。

# 非アクティブ
$ conda deactivate
# 仮想環境の削除
$ conda remove -n pytorch --all

PyTorchのインストール

最後に、いよいよPyTorchのインストールをします。以下のURLからコマンドが入手できるので、それをそのままGPUサーバーで打てば大丈夫です。

pytorch.org

conda install pytorch torchvision cudatoolkit=10.1 -c pytorch

最後に、GPUの動作を確認してみましょう。

$ python
>>> import torch
>>> nums = torch.randn(4,4)
>>> nums.cuda() 

最後のnums.cuda()で結果が出てくれれば全ての処理は完了です。

まとめ

今回は、Tellusへ申請すると手に入る高火力GPUサーバーにPyTorchを入れるまでの一連の処理を備忘録として載せました。今後はやってみた解析のコードをこちらで公開しようと考えているので、興味が出た方がそれでTellusに登録するきっかけになってくれれば幸いです。

anacondaの環境構築やPyTorchの導入の際に参考にしたサイト

qiita.com