tencent cloud

Tencent Kubernetes Engine

ディープラーニングコンテナイメージをビルドする

PDF
フォーカスモード
フォントサイズ
最終更新日: 2023-04-28 15:30:11

概要

このドキュメントではTKE Serverlessクラスターにディープラーニングをデプロイする一連の実践を記録し、 TensorFlowをデプロイすることから後続のKubeflowを実現するデプロイまで、完全なコンテナのディープラーニング実践方法を提供することを目的としています。このドキュメントでは自作ディープラーニングのコンテナイメージの構築を重点的に紹介し、後のディープラーニングのデプロイタスクにより手軽でスピーディーな完了方法を提供します。
この実践タスクの要件では、パブリックイメージがディープラーニングをデプロイするニーズを満たすことができないため、この実践では自作イメージを選択します。
ディープラーニングフレームワークTensorFlow-gpu以外に、このイメージはさらにGPU トレーニングに必要なcuda、cudnnを含み、TensorFlow公式が提供するディープラーニングモデルを統合します。現在CV、NLP、RSなどの分野のSOTAモデルが含まれています。モデルの詳細については、Model Garden for TensorFlowをご参照ください。

操作手順

1. この例ではDocker コンテナによってイメージを構築します。Dockerfileファイルを準備し、例は次のとおりです。
FROM nvidia/cuda:11.3.1-cudnn8-runtime-ubuntu20.04
RUN apt-get update -y \\
&& apt-get install -y python3 \\
python3-pip \\
git \\
&& git clone git://github.com/tensorflow/models.git \\
&& apt-get --purge remove -y git \\ #不要なコンポーネントは適時アンインストールする(オプション)
&& rm -rf /var/lib/apt/lists/* #aptインストール用のインストールパッケージを削除する(オプション)
&& mkdir /tf /tf/models /tf/data #保存モデルおよびデータを作成するパス。マウントポイントにすることができます(オプション)
ENV PYTHONPATH $PYTHONPATH:/models
ENV LD_LIBRARY_PATH $LD_LIBRARY_PATH:/usr/local/cuda-11.3/lib64:/usr/lib/x86_64-linux-gnu#
RUN pip3 install --user -r models/official/requirements.txt \\
&& pip3 install tensorflow
2. 次のコマンドを実行してデプロイを行います。
docker build -t [name]:[tag] .
説明
例えばPython、TensorFlow、cuda、cudnnおよびモデルライブラリなどの必要なコンポーネントのインストールステップは、ここでは説明を省略します。

関連説明

イメージ関連

基本イメージ nvidia/cudaについて、CUDAコンテナイメージはCUDAがサポートするプラットフォームおよびアーキテクチャは使用しやすい配信版を提供します。この選択はcuda 11.3.1、cudnn 8の組み合わせです。その他のバージョン選択については、Supported tagsをご参照ください。

環境変数

このドキュメントのベストプラクティスを行う場合、重点的に環境変数 LD_LIBRARY_PATHに注目する必要があります 。
LD_LIBRARY_PATHはダイナミックリンクライブラリのインストールパスで、通常libxxxx.soの形式です。ここでは主にcudaおよびcudnnをリンクします。例えばlibcudart.so.[version]、ibcusolver.so.[version]、libcudnn.so.[version] などです。llコマンドを実行して確認することができ、下図に示すとおりです。

公式イメージのDockerfileソースコードに基づいて以下のコマンドを実行します
ENV LD_LIBRARY_PATH /usr/local/nvidia/lib:/usr/local/nvidia/lib64
このうち、/usr/local/nvidia/libはcudaパスのソフトリンクを指し、cudaに用意されています。cudnnを付帯するバージョンはcudnnのインストールのみを行い、cudnnには LD_LIBRARY_PATHが指定されていないため、Warningエラーが発生し、GPU リソースが使用できなくなり、エラーは次のように表示されます。
Could not load dynamic library 'libcudnn.so.8'; dlerror: libcudnn.so.8: cannot open shared object file: No such file or directory
Cannot dlopen some GPU libraries. Please make sure the missing libraries mentioned above are installed properly if you would like to use GPU...
このようなエラーが発生した場合、手動でcudnnパスの追加を試みることができます。ここで以下のコマンドを実行してイメージを実行し、libcudnn.soが所在するパスを確認できます。
docker run -it nvidia/cuda:[tag] /bin/bash
ソースコードからわかるように、cudnnはapt-get installコマンドによってインストールされ、デフォルトで/usr/libにインストールされます。この例ではlibcudnn.so.8の実際のパスは/usr/lib/x86_64-linux-gnu#下で、コロンで後方に補足されます。
バージョンのシステムが異なるなどの原因により、実際のパスにばらつきが生じ、ソースコードおよび実際の観察が難しくなる可能性があります。

後続の操作

後続の操作はTKE Serverlessでディープラーニングを行うというドキュメントをご参照ください。

よくあるご質問

この実践過程で発生した問題は、よくあるご質問というドキュメントを参照してトラブルシューティングを行って解決してください。

ヘルプとサポート

この記事はお役に立ちましたか?

フィードバック