1. ホーム

Pycharm コード ドッカー コンテナ 実行 デバッグ|機械学習シリーズ

2022-02-14 19:49:36

内容

紹介文

バージョン

デプロイメント

ドライバのインストール

dockerのインストール

ベースコンテナの作成

Anacondaのインストール

Anacondaの使用について

DockerコンテナSSHサービス起動

PycharmがDockerコンテナに接続します。

検証中 

バリデーションの実行

コードの更新がリモートコンテナ製品をアップロードまたはダウンロードする方法

 製品がコンテナ内に生成されていることを確認する

要約


はじめに

機械学習コードの実行とAnaconda+cudaグラフィックスドライバサポートのインストールの正規ローカライズについては、多くの記事で取り上げられているので、ここでは割愛します。この記事は主に、ローカルコンピュータにグラフィックカードがない作業環境において、グラフィックカードを持つリモートサーバー上でプログラムを実行する必要性に対処することを目的としています。

この記事では、グラフィックカードを搭載したDockerコンテナをデプロイする方法と、pycharmを使用してDockerコンテナに接続し、機械学習コードを実行する方法について説明します。

バージョン情報

Pycharm: 2020.1.3

ドッカー: 19.03.12

python: 3.6.13

デモのアルゴリズム バックグランドマットV2

デプロイメント

以下、インストールの基本的な構成要素について、主なプロセスを説明しながら、詳細なフローを追って説明します。

ドライバのインストール

このサーバーにグラフィックカード(機械学習はご存じ、NVIDIAのグラフィックは必須です)を入れて来て、グラフィックカードがインストールされているかどうか確認します。

[root@data2 home]# nvidia-smi
Wed Sep 29 22:56:47 2021
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 440.100 Driver Version: 440.100 CUDA Version: 10.2 |
-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M.
| ===============================+======================+======================|
| 0 GeForce GTX 108...  Off | 00000000:13:00.0 Off | N/A |
| 23% 24C P8 8W / 250W | 1543MiB / 11178MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 1 GeForce GTX 108...  Off | 00000000:1B:00.0 Off | N/A |
| 28% 46C P2 70W / 250W | 1865MiB / 11178MiB | 0% Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
=============================================================================|
| 0 8895 C python 1529MiB |
| 1 8881 C python 1849MiB |
+-----------------------------------------------------------------------------+

displayコマンドが存在しない場合、対応するバージョンのグラフィックカードドライバをインストールする必要があります。

リンク先を参照することができます。 https://blog.csdn.net/maqian5/article/details/109777701

インストールしたらとりあえずそっとしておいてあげましょう、後で必要になりますから。

dockerのインストール

dockerのインストール、さっそくですが、リンクを貼っておきます。 https://blog.csdn.net/u014069688/article/details/100532774

インストールが完了したら、docker psで確認することができます。

ベースコンテナの作成

ベースコンテナはanacondaを使って仮想環境を実装する必要があるため、pythonのベースイメージは使わず、Ubuntu18のシステムイメージをそのままベースイメージとして使用します。

[root@data2 home]# docker pull ubuntu:18.04
18.04: Pulling from library/ubuntu
e4ca327ec0e7: Pull complete
Digest: sha256:9bc830af2bef73276515a29aa896eedfa7bdf4bdbc5c1063b4c457a4bbb8cd79
Status: Downloaded newer image for ubuntu:18.04
docker.io/library/ubuntu:18.04

コンテナの作成を開始します。

コマンドを実行します。

docker run --name=aliang -itd --gpus all --restart=always --shm-size 16G --net=host ubuntu:18.04 bash

 実行結果です。

[root@data2 home]# docker run --name=aliang -itd --gpus all --restart=always --shm-size 16G --net=host ubuntu:18.04 bash
6c0b30fd0c258adeb76bc2baf817aaaf2064f1f0d96b0054d7e6a187ae0e5725
[root@data2 home]# docker exec -it aliang bash
root@data2:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var

 コマンドの説明です。

1. --name=aliang: コンテナに名前を付ける

2. --gpus all: すべてのgpusが使用可能、推奨しない、少しもったいない、別の例が続きます。

3, --shm-size 16G: ビデオメモリパラメータ、あげてもあげなくてもたいしたことない

4, --net=host: コンテナで使用、怠惰なアプローチ、コンテナとホスト内の共有ネットワーク、以下の別の例では、より良い方法を持っています。

より良い方法を

1. グラフィックカードの番号を確認する

[root@data2 home]# nvidia-smi -L

<イグ

カードを選択し、UUIDの後にシリアル番号をコピーします。

2. コマンドを使用する

docker run --name=aliang -itd --restart=always --shm-size 16G --gpus device=GPU-xxxxx -p 2299:22 ubuntu:18.04 bash

<イグ

上で調べたシリアルナンバーをデバイスの後に接続します。コンテナのポート22をホストのポート2299にマッピングします(もちろん、このポートが出るかどうかはあなた次第です)。

Anacondaのインストール

このコンテナを後々のトレーニングで頻繁に使えるようにするためには、condaを使った仮想環境が断然おすすめです。

ここでやりたいことは、コンテナ内にインストールすることなので、コンテナ内のシステムのコマンドアップグレードをする必要があります。

apt-get update
apt-get upgrade

 Anacondaのインストールに関しては、あまり詳しくは説明しませんが、ここにリンクがあります。  https://blog.csdn.net/tkzky001/article/details/118705205

Anacondaの使用について

Anacondaの仕組みについて簡単に説明します。主に、複数の仮想実行環境を構築することができ、現在どの仮想環境を使用しているかは、コマンドラインのプレフィックスで分かります。

(base) root@data2:/#

baseは基本環境、以下は機械学習モデルに必要な環境をインストールします。機械学習のアーキテクチャは主にpytorchを使用しているため、以下のコマンドを使用します。

python 3.6の基本環境の作成

conda create -n bg_matting python=3.6

 環境の活性化

(base) root@data2:/# conda activate bg_matting
(bg_matting) root@data2:/#

新しい仮想環境に切り替わっているかどうかは、プレフィックスで判断できます。

環境の検証

(bg_matting) root@data2:/# python -V
Python 3.6.13 :: Anaconda, Inc.

必要なのは確かにバージョン3.6です。

pytorchのインストール

pytorchのウェブサイトを開きます。 https://pytorch.org/  をクリックし、下にスクロールすると、インストールコマンドを見ることができます。

linux環境CUDAの最新版を選択してください。

Dockerコンテナ SSHサービス開始

以上の手順で、基本的にdocker環境はOKなので、ここではリモートデバッグのためにコンテナのsshサービスを設定する方法を説明します。

まず、vimをインストールします。そうしないと、めんどくさいです。

apt-get install vim

opensshのインストール

apt-get install openssh-server

 passwdを使用して、ユーザー名とパスワードを追加します。

passwd

vimの設定ファイルを変更する

vim /etc/ssh/sshd_config

2ヶ所修正

1.ポート

念のためですが、Dockerコンテナの構築時に--net=hostを使用した場合、元のポート22ではホストのsshポートと衝突してしまうため、ポートを変更する必要があります。これは、以下のように他のものに調整することができます。

上記以外の方法であれば、コンテナはホストの内部ポート22を2299にマッピングしており、共有ではないため、修正する必要はありません。

2. ログイン許可

#PermitRootLogin prohibit-password

PermitRootLogin はい

 上記の設定がすべて完了すると、次のようにsshが起動します。

/etc/init.d/ssh restart

Dockerコンテナに接続するPycharm

基本的な環境がインストールされたので、IDEとdockerコンテナ環境を接続させてみます。

1. 設定をタップし、Project Interpreterを開く。

 2. 追加]をクリックし、[SSHインタプリタ]を選択します。

 3. ホストIP、マッピングされたポート、sshユーザー名を記入します。

 4. passwdで設定したパスワードを、次に記入します。

 5. 5. Anaconda パッケージインストール内のリモート docker コンテナ python 実行ファイルを選択します。/ルート/anaconda3/envs/bg_matting/bin/python です。

6. リモートプロジェクトディレクトリの場所にマップするローカルプロジェクトディレクトリを選択します。

 7. 右下にリモート実行の設定が表示されます。

8. pycharmは、リモートDockerコンテナにプロジェクトを完全に同期させます。 

確認する 

 さて、すべての設定が終わったので、プロジェクトを実行してリモートで動作するかどうか確認してみましょう。

検証を実行する

 質問はありません。

コードアップデートがリモートコンテナ製品をアップロードまたはダウンロードする方法

ツールをクリックして、選択したファイルやフォルダをドッカーコンテナにプッシュするか、逆にリモートコンテナからローカルにダウンロードすることができます。

 コンテナ内の製品が生成されていることを確認する

コマンドを入力すると、コンテナに入り、プログラム実行された製品が表示されます。

[root@data2 home]# docker exec -it a8d bash
(base) root@data2:/# cd /home/BackgroundMattingV2-master/
(base) root@data2:/home/BackgroundMattingV2-master# ls
LICENSE data export_onnx.py inference_hy.spec inference_video.py train_base.py
README.md data_path.py export_torchscript.py inference_images.py inference_webcam.py train_refine.py
__pycache__ dataset images inference_speed_test.py model
content doc inference_hy.py inference_utils.py requirements.txt
(base) root@data2:/home/BackgroundMattingV2-master# cd content/output/
(base) root@data2:/home/BackgroundMattingV2-master/content/output# ls
fuse
(base) root@data2:/home/BackgroundMattingV2-master/content/output#


問題なし!

概要

この方法は、職場にそれほど多くのグラフィックカードがない場合や、すでにデプロイされたプロジェクトをデバッグする必要がある場合など、全体的に優れています。もう一つの重要な特徴は、デバッグするこのコンテナを直接 docker イメージにパッケージすることができ、他の人はそのイメージを引っ張ってきてあなたのプログラムコードを実行することができるということです。コンテナ化されたプロジェクトの問題に対する直接的な解決策です。

この記事があなたにとって有効であったなら、ぜひ「いいね!」を押してください、thanks。