本日から、開発者がGraphcoreのPoplar® SDKをDocker Hubで利用できるようになりました。またそれに伴い、GraphcoreはDocker社の認定公開者パートナープログラムに参加しました。さらにDocker社と共同で、当社のソフトウェアスタックをコンテナイメージとして配布し、開発者がGraphcoreのIPUシステム上でMLアプリケーションを簡単に構築、管理、展開できるようにしています。
当社は、ハードウェアとソフトウェアをさらに使いやすくすることを目標に、開発者のエクスペリエンス向上に取り組み続けています。ちょうど1年前、あらかじめ構築されたDockerコンテナをユーザー向けに導入しました。そして今回、イノベーションを推進するという当社の目標の一環として、当社のPoplar SDK、PyTorch for IPU、TensorFlow for IPU、およびToolsをDocker Hubコミュニティの誰もが完全に利用できるようにしました。
ここからは、開発者向けのメリットとその利用方法ついて詳しく説明します。
コミュニティにとってDockerが重要である理由
いまやDockerは、コンテナイメージをプルするための主要なソースとなっています。最新のIndex Reportによると、Docker Hubではこれまでに史上最高となる、合計3960億回のプルが行われています。さらに、8万人の開発者が回答したStack Overflow Survey 2021によると、Docker Hubは「最も求められ、愛され、使われている」開発者ツールの一つであり続けています。
PyTorch、TensorFlow、またはGraphcoreのPoplar SDKを直接使って作成されたアプリケーション用に、あらかじめパッケージ化されたランタイム環境が提供されているので、IPU開発者は当社のDockerコンテナイメージを使用することで、IPUシステム上で本番環境に展開されるアプリケーション開発のワークフローを簡素化・高速化できます。コンテナ化されたアプリケーションでは、実行に一貫性と反復可能性が生まれることで移植性が高まり、多くのMLOpsフレームワークにとって重要なイネーブラーとなります。
開発者が行えること
本日より、IPU(インテリジェンスプロセッシングユニット)と協調設計された、Poplarの機械知能アプリケーション専用ソフトウェアスタックを開発者が自由にインストールできるようになりました。PoplarはGraphcoreのグラフツールチェーンであり、当社の使いやすく柔軟なソフトウェア開発環境の中核をなすもので、標準的な機械学習フレームワークと完全に統合されているので、開発者は既存のモデルを簡単に移植できます。完全制御してIPUの性能を最大限に引き出したい開発者のために、PoplarではPopART™(Poplar Advanced Runtime)を介してPythonやC++でIPUを直接プログラミングできます。
当社のPoplar SDKイメージは、以下のリポジトリからプルできます。
- Poplar SDK – Poplar、PopART、およびIPUデバイスを操作するためのツールが含まれています。
- PyTorch for IPU – Poplar SDKリポジトリのすべてが含まれており、PyTorchがプリインストールされています。
- TensorFlow for IPU – Poplar SDKリポジトリのすべてが含まれており、TensorFlow 1または2がプリインストールされています。
- Tools – IPUデバイスの管理・診断用ツールが含まれています。
またDocker公開者プログラムの一環として、Graphcoreのコンテナイメージはレート制限が免除されています。つまり開発者は、Docker Hubのサブスクリプションに関係なく、無制限にPoplarのコンテナイメージをリクエストできます。
DockerでPoplarを使うには
PoplarのDockerコンテナでは、IPUでモデルを実行するために必要なものすべて(GraphcoreのPoplar® SDK、ランタイム環境、システムツール、構成、ライブラリなど)が、完全なファイルシステムにカプセル化されています。 これらのイメージを使用し、IPUコードを実行するためには、以下の手順を完了する必要があります。
1. ホストマシンにDockerをインストールします。
2. GraphcoreのPoplar SDKコンテナイメージをDocker Hubからプルします。
3. IPUへのアクセスを準備します。
4. IPUとDockerコンテナのアクセス性を検証します。
5. IPU上でアプリコードをサンプリングします。
ホストマシンにDockerをインストールする
Dockerのインストール方法は、OSやバージョン、プロセッサなどによって異なります。
Dockerのスタートアップガイドに従ってください。
GraphcoreのPoplar SDKコンテナイメージをDocker Hubからプルする
Dockerがインストールされたら、コマンドを実行してDocker Hubから当社のホストイメージをダウンロードし、ホストマシンで実行できるようになります。Poplar SDKのコンテナイメージはDocker HubのGraphcore Poplarリポジトリからプルできます。
リポジトリは4つあり、SDKのバージョン、OS、アーキテクチャに応じて複数のイメージがそれぞれに含まれています。
- - graphcore/pytorch
- - graphcore/tensorflow
- - graphcore/poplar
- - graphcore/tools
フレームワークリポジトリからプルすると、デフォルトではAMDホストプロセッサ用にコンパイルされた最新バージョンのSDKがダウンロードされます。
最新のTensorFlowイメージをプルするには、以下を使用します。
$ docker pull graphcore/tensorflow
特定のSDKのバージョンやプロセッサに対応した特定のビルドを選択したい場合は、Docker Image Tags(Dockerイメージタグ一覧)に基づいてタグを構成できます。
IPUへのアクセスを準備する
POD内のIPUと通信するためには、ホストマシンとIPUの間の接続、すなわちIPU over Fabric(IPUoF)を構成する必要があります。Poplarがデバイスにアクセスするために必要な情報は、IPUoF構成ファイルを介して渡すことができます。このファイルはデフォルトで、ホームディレクトリ内のディレクトリ(~/.ipuof.conf.d
)に書き込まれます。この構成ファイルは、セキュリティ上の理由などでPoplarのホストがV-IPUコントローラに直接ネットワークアクセスできない場合に便利です。
Graphcloudを使用している場合、IPUoFのデフォルト構成ファイルは、新規ユーザーが作成されてPODに追加されるたびに生成されます。そのフォルダ(~/.ipuof.conf.d/lr21-3-16ipu.conf
など)に.confファイルがあるかどうか確認してください。 このセットアップができていれば、次のステップに進みます。
そうでない場合は、「V-IPU Guide(V-IPUガイド):Getting Started(はじめに)」に従って、PoplarがV-IPUサーバーに接続するように構成する必要があります。次のセクションのスクリプトを実行するためには、IPUoFの構成ファイルを~/.ipuof.conf.d
フォルダに保存することに注意してください。
IPUとDockerコンテナのアクセス性を検証する
コンテナの準備ができたら、コンテナの内部からIPUにアクセスできるかどうか確認します。
以下を実行して、コンテナのコンテキスト内のIPUデバイスをリストアップします。
$ docker run --rm --ulimit memlock=-1:-1 --net=host --cap-add=IPC_LOCK --device=/dev/infiniband --ipc=host -v ~/.ipuof.conf.d/:/etc/ipuof.conf.d -it graphcore/tools gc-info -l
サンプルのTensorFlowアプリを実行する
まず、GitHubのGraphcoreチュートリアルリポジトリからコードを入手します。
$ git clone https://github.com/graphcore/tutorials.git
$ cd tutorials
Dockerコンテナは隔離された環境です。 コンテナは空になり、ホストマシンのファイルシステムにアクセスできなくなります。 ホストマシンのデータを利用するためには、Dockerコンテナ内でデータにアクセスできる必要があります。
データにアクセスできるようにするには、ディレクトリをボリュームとしてマウントすることで、ホストマシンとDockerコンテナ環境の間でデータを共有します。
Dockerベースの開発環境で作業している場合、カレントディレクトリをコンテナにマウントしてから(セクション2.2の「ホストからのディレクトリのマウント」で説明)、-w <dir name>
でコンテナ内部の作業ディレクトリを設定するのが一般的なパターンです。例えば「-v "$(pwd):/app" -w /app
」とします。
TensorFlowコンテナでmnistの例を実行するには、チュートリアルリポジトリをDockerコンテナにマウントして実行する以下のコマンドを使用します。
$ docker run --rm --ulimit memlock=-1:-1 --net=host --cap-add=IPC_LOCK --device=/dev/infiniband --ipc=host -v ~/.ipuof.conf.d/:/etc/ipuof.conf.d -it -v "$(pwd):/app" -w /app graphcore/tensorflow:2 python3 simple_applications/tensorflow2/mnist/mnist.py
開発者向け資料およびリンク