Pycharm コード ドッカー コンテナ 実行 デバッグ|機械学習シリーズ
内容
コードの更新がリモートコンテナ製品をアップロードまたはダウンロードする方法
はじめに
機械学習コードの実行と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。
関連
-
Build Record 2-CSS file not loaded-Solved-Resource interpreted as Stylesheet but transferred with MIME type text/plain
-
192.168.0.1/24のようなipセグメント/番号は何を意味するのでしょうか?
-
コマンドラインオプション "-std=c++11" が認識されない場合の対処法
-
error: 単項「*」の型引数が無効です(「int」を持つ) *__first = __tmp.
-
Pythonがエラー 'urllib' に 'urlretrieve' という属性がないとプロンプトを出す?
-
OSError: [Errno 98] アドレスはすでに使用中です(エラーは解決されました)
-
SQLステートメント共通エラー。"不明な列 'xxx' in 'where 節 "どのように解決するには?
-
mscorlib.dll で "TargetInvocationException" 型の例外が発生するが、ユーザーコードで処理されない
-
android:textAlignment パラメータ説明
-
win7 to win10 api-ms-win-core-libraryloader-l1-1-1.dll is missing.
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
zsh: コマンドが見つからない: nvm 解決策
-
postman request prompt このリソースにアクセスするには完全な認証が必要です。
-
[Android Studioのエラー] Emulator: HAXの初期化に失敗しました: 無効な引数です。
-
python: Image という名前のモジュールがない
-
輸出が定義されていない
-
RabbitMQ起動時のトラブルと解決方法
-
簡単な操作でprotobufのバージョンの問題を解決するために、コピーして貼り付けることができます。
-
Pythonの一般的なエラーとデバッグ方法 (2)
-
ハウジング・エンド ボブ・オストヴィッチ
-
Javaでnacosにログインし、設定を変更して公開する。