はじめに
TDU_データ科学・機械学習研究室AdventCalendar1日目
普段は深層学習を用いた伝統文様の画像解析をしています.
普段研究ではDockerを用いてGPUサーバ上で作業をしています.
GPUマシン上にDockerを立てて,その中にPythonやら機械学習の環境を構築しています.メインとするGPUマシンにローカルマシン(MacBook)からvscodeのRemoteDevlopementを利用してアクセスしています.しかし,Dockerを利用しているためvscodeのAutoCompletionを利用するには特殊な設定が必要です.
https://code.visualstudio.com/docs/remote/containers
Dockerの環境を用いて開発するのはとても便利ですが,vscodeの補完機能が利用できないのはやはりコーディングが難しいです.また,vscodeのデバッガーが起動できないため基本pdbやプリントデバッグを利用してデバッグするためコードの理解に時間がかかります.
そこで,code-serverを普段利用してるDockerfileに追記をすることで起動させ,デスクトップ版のvscodeっぽく利用してしまおうという魂胆です.
デスクトップ版のcode-serverを利用するメリットは下記のようなものがあります.
code-server利用のメリット
- 開発がマシンによらない.
- Desktop版のvscodeと違い,リモートマシンにアクセスできればどこから(PC, タブレット,スマホ)でも開発が可能です.
- エディタがコードベースで管理可能
- code-serverの起動やvscodeの拡張機能含め,Dockerfileに記述をするので,GitHubでの管理可能です.
手順
ここからはDockerfileを作りながら最終的にcode-serverを起動できるようにする手順を書きます.
1. DockerHubより手ごろなイメージを探す.
下記サイトよりpytorchのDockerイメージを探します.
https://hub.docker.com/r/pytorch/pytorch/tags
1.8.0-cuda11.1-cudnn8-runtime
ハイフンでつながれているのがそれぞれpytorch, CUDA, cudnnのバージョンです.
適宜自分の環境に合うように利用してください.
研究で利用しているプログラムもあるので私はpytorch1.8.0のバージョンを使います.
2. ベースとなるイメージからDockerfile作成
ここからはDockerfileをいじります.
Dockerfileの一行目には下記のようにベースとなるイメージを指定します.
FROM pytorch/pytorch:1.8.0-cuda11.1-cudnn8-devel
それ以降は環境構築に必要なコマンド等を記述します.
僕のファイルは以下のようになります.
FROM pytorch/pytorch:1.8.0-cuda11.1-cudnn8-devel
# Install vim
RUN apt-get update && apt-get install -y vim
WORKDIR /workspace
ADD requirements.txt /workspace
# install git
RUN apt-get update && apt-get install -y git
# install python modules
RUN pip install -r requirements.txt
# install hydra
RUN pip install hydra-core --upgrade
# 日本語化
RUN apt-get update \
&& apt-get install -y locales \
&& locale-gen ja_JP.UTF-8 \
&& echo "export LANG=ja_JP.UTF-8" >> ~/.bashrc
3. code-server構築手順をDockerfileに記述
Dockerfileの最終行には下記を追加してください.
~~~~~途中~~~~~
RUN apt-get update && apt-get install -y curl
RUN curl -fsSL https://code-server.dev/install.sh | sh
RUN code-server \
--install-extension ms-python.python \
--install-extension ms-ceintl.vscode-language-pack-ja
3. docker-compose.yml作成
docker起動コマンドをすっきりさせたいのと,複数コンテナ利用するための拡張性のためにdocker-compose.ymlを作成します.
version: '2.3'
services:
pytorch-docker:
build:
context: ./Docker
dockerfile: Dockerfile
shm_size: '2gb'
container_name: torch-docker
user: "${UID}:${GID}"
runtime: nvidia
# command: /bin/bash
# command: jupyter lab --port 9999 --ip=0.0.0.0 --allow-root --NotebookApp.token='' --NotebookApp.password=''
command: code-server --port 8080 --bind-addr=0.0.0.0:8080 /home/shuzo --log debug
ports:
- "7000:7000"
- "9999:9999"
- "8501:8501"
- "0.0.0.0:8080:8080"
- "0.0.0.0:8443:8443"
environment:
- TZ=$TZ
- LANG=$LANG
- PASSWORD=$PASSWORD
tty: true
volumes:
- ./:/workspace
- /etc/passwd:/etc/passwd:ro
- /etc/group:/etc/group:ro
4. .envファイルに記述
Dockerfileと同じ階層に.envファイルを用意します.
UID=xxx
GID=xxx
TZ=Asia/Tokyo
PASSWORD=xxxxx
.envファイルに記述してしまってますが,多分よくありません.
何かいい方法あれば教えてください.
5. 起動&アクセス
sudo docker-compose up --build
で起動できます.
無事起動ができたら,
ブラウザで<起動したサーバのIP>:8080にアクセスしてください.
6. 補完機能を有効化
Docker内にあるAnacondaのPathを通します.これをすることでcode-server上で補完機能が利用できます.
- まず,pythonの拡張機能をインストールしてください.
- 設定で,interpreterを検索
- Python Pathに
/opt/conda/bin/python3
を追加
おわりに
今回紹介する内容はGitHubで公開しています.逐次アップデート予定
参考