LoginSignup
7
4

More than 1 year has passed since last update.

はじめに

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の一行目には下記のようにベースとなるイメージを指定します.

Dockerfile
FROM pytorch/pytorch:1.8.0-cuda11.1-cudnn8-devel

それ以降は環境構築に必要なコマンド等を記述します.
僕のファイルは以下のようになります.

Dockerfile
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を作成します.

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ファイルを用意します.

.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上で補完機能が利用できます.
1. まず,pythonの拡張機能をインストールしてください.
2. 設定で,interpreterを検索
3. Python Pathに/opt/conda/bin/python3を追加

おわりに

今回紹介する内容はGitHubで公開しています.逐次アップデート予定

参考

7
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
4