HPC Pack Docker タスクは、Docker コンテナーで実行されているタスクです。
この機能を使用するには、タスク環境変数 CCP_DOCKER_IMAGE
を設定して、Docker イメージを示します。これは、タスクを実行するために Docker コンテナーを開始するために使用されます。 形式は次のようになります: CCP_DOCKER_IMAGE=[Docker Registry]<Repository>[:Tag]
また、この機能を強化するために使用できる環境変数がいくつかあります。
CCP_DOCKER_NVIDIA
(Linux のみ) を使用して、docker
を使用するのではなく、コマンドnvidia-docker
を使用して Docker コンテナーを起動するかどうかを示します。 たとえば、CCP_DOCKER_NVIDIA=1
のようにします。ホストから Docker コンテナーにマウントするディレクトリをボリュームとして設定する
CCP_DOCKER_VOLUMES
。 たとえば、CCP_DOCKER_VOLUMES=/host_path1:/container_path1,/common_path,/host_path2:/container_path2:z
またはCCP_DOCKER_VOLUMES=c:\foo:c:\dest,c:\foo:d:
です。CCP_DOCKER_DEBUG
コマンドの完了後にデバッグのためにコンテナーを有効のままにするかどうかを示すには、後でコンテナーを手動で削除する必要があります。 たとえば、CCP_DOCKER_DEBUG=1
のようにします。CCP_DOCKER_START_OPTION
、Docker コンテナーを起動するときに追加のオプションを追加します。 たとえば、CCP_DOCKER_START_OPTION=--network=host --ulimit memlock=-1
のようにします。CCP_DOCKER_SKIP_SSH_SETUP
(Linux のみ) を使用して、既定の方法をスキップするかどうかを示します (コンテナー内のホストの SSH キーとネットワークを使用し、ホスト上の SSH サーバーを停止し、コンテナーで SSH サーバーを起動します)。コンテナー間の SSH 通信をセットアップします。これは、Docker イメージでこれを処理する場合に設定する必要があります。 たとえば、CCP_DOCKER_SKIP_SSH_SETUP=1
のようにします。
Docker タスクを実行するには、前提条件として Docker アプリケーションを Windows/Linux コンピューティング ノードにインストールする必要があります。
MPI アプリケーションを実行するために複数の Linux ノードで割り当てられている Docker タスクでは、各 Linux ノード上のコンテナーがホストとネットワークを共有するため、他の MPI Docker タスクでこれらのノードを同時に使用する必要はありません。 Windows コンピューティング ノードでの Docker タスクでの MPI アプリケーションの実行はまだサポートされていません。
Docker イメージ内の Linux OS には /bin/bash
必要があります。
Linux ノード上の Docker コンテナーで MPI アプリケーションを実行するには、docker イメージに sudo
、SSH service
、MPI
がインストールされている必要があります。
Linux コンピューティング ノードで Docker タスクをステップ バイ ステップで実行する
ARM テンプレート を使用してクラスターをデプロイする
Linux ワークロード の単一ヘッド ノード クラスターを使用してクラスターをデプロイする
armtemplate を
する
Linux コンピューティング ノードに Docker をインストールする
clusrun を使用
docker ドキュメントに従って Docker CE をインストールする clusrun /nodegroup:linuxnodes /interleaved yum -y update clusrun /nodegroup:linuxnodes /interleaved yum install -y yum-utils device-mapper-persistent-data lvm2 clusrun /nodegroup:linuxnodes /interleaved yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo clusrun /nodegroup:linuxnodes /interleaved yum install -y docker-ce docker-ce-cli containerd.io clusrun /nodegroup:linuxnodes systemctl start docker
このドキュメントでは、Docker CE のバージョンは 17.11.0-ce-rc3 です。
Docker タスクとしてコンテナーでコマンドを実行する
1 つの Docker タスクを含むジョブを送信する
job submit /env:ccp_docker_image=docker.io/library/ubuntu:16.04 hostname
HPC Pack クラスター マネージャーでジョブの結果を確認します。
dockertask1 を
する 複数の Docker タスクを含むジョブを送信する
job new job add !! /env:ccp_docker_image=ubuntu cat /etc/*release ^| grep ^^NAME job add !! /env:ccp_docker_image=centos cat /etc/*release ^| grep ^^NAME job add !! /env:ccp_docker_image=debian cat /etc/*release ^| grep ^^NAME job add !! /env:ccp_docker_image=fedora cat /etc/*release ^| grep ^^NAME job submit /id:!!
HPC Pack クラスター マネージャーでジョブの結果を確認します。
dockertask2 を
する 同じ環境変数がない場合、タスクはジョブの環境変数を継承するため、ジョブ環境変数で Docker イメージを割り当てることもできます
job new /jobenv:ccp_docker_image=ubuntu job add !! hostname^; cat /etc/*release ^| grep ^^NAME job add !! hostname^; cat /etc/*release ^| grep ^^NAME job add !! hostname^; cat /etc/*release ^| grep ^^NAME job add !! /env:ccp_docker_image=centos hostname^; cat /etc/*release ^| grep ^^NAME job submit /id:!!
HPC Pack クラスター マネージャーでジョブの結果を確認します。
dockertask3 を
する
MPI Docker タスクの実行
MPICH がインストールされたカスタマイズされた Docker イメージをビルドする
Docker がインストールされている任意の Linux ノードでこの手順を実行します。
docker イメージを
ubuntu
してコンテナーを起動します。docker run -it ubuntu
apt-get
でsudo
、ssh
、vim
、mpich
をインストールします。apt update; apt -y install sudo ssh vim mpich
単純な MPI プログラムを作成します。
mkdir /mpisample chmod o+w /mpisample cd /mpisample vim helloMpi.c
次の内容で
helloMpi.c
を編集します。#include<mpi.h> #include<stdio.h> int main(int argc, char** argv) { int rank, size, processor_name_length; char processor_name[1000]; MPI_Init(NULL, NULL); MPI_Comm_rank (MPI_COMM_WORLD, &rank); MPI_Comm_size (MPI_COMM_WORLD, &size); MPI_Get_processor_name(processor_name, &processor_name_length); printf("Hello from %s, rank %d out of %d processors.\n", processor_name, rank, size); MPI_Finalize(); }
mpicc
でhelloMpi.c
をコンパイルし、run.sh
シェル スクリプトを作成します。mpicc helloMpi.c -o helloMpi vim run.sh
次の内容で
run.sh
を編集します。#!/bin/bash echo $CCP_NODES | tr " " "\n" | sed "1d;n;d" | cat > host_file num=$1 [ -z "$num" ] && num=4 mpirun -n $num -f host_file ./helloMpi
run.sh
の実行アクセス許可を設定し、docker コンテナーを終了します。chmod +x run.sh exit
Docker イメージをコミットして Docker ハブにプッシュします。
docker commit $(docker ps -qa -n 1) <docker hub account>/mpich docker login -u <docker hub account> -p <password> docker push <docker hub account>/mpich
この操作を実行するには、Docker Hub アカウントが必要です。
これは Docker イメージを手動でビルドする方法です。代わりに Dockerfile を使用します。
MPI タスクの実行
上記の手順でビルドした Docker イメージで MPI アプリケーションを実行する docker タスクを含むジョブを送信します。
job submit /env:ccp_docker_image=<docker hub account>/mpich /numnodes:4 /workdir:/mpisample ./run.sh 16
DOCKER イメージを SSH サーバーとして使用して MPI Docker タスクを実行する
SSH サーバーとして Docker イメージを作成する
ルート ユーザーの SSH キーを含む Ubuntu で Docker イメージをビルドするための
Dockerfile
を作成します。これは、ポート3022
を持つ SSH サーバーとして開始されます。FROM ubuntu RUN apt-get update RUN apt-get install -y sudo ssh mpich RUN ssh-keygen -t rsa -N "" -f /root/.ssh/id_rsa RUN cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys RUN echo "Port 3022" >> /root/.ssh/config RUN mkdir /run/sshd ENTRYPOINT ["/usr/sbin/sshd", "-D", "-p", "3022"]
Docker イメージをビルドして Docker ハブにプッシュします。
docker build -t <docker hub account>/ubuntu_mpich_as_ssh_server . docker login -u <docker hub account> -p <password> docker push <docker hub account>/ubuntu_mpich_as_ssh_server
MPI タスクを実行する
上記の手順で作成した docker イメージで MPI アプリケーションを実行するための docker タスクを含むジョブを送信します。コマンド
mpirun -machinefile $CCP_MPI_HOSTFILE hostname
と環境CCP_DOCKER_IMAGE=<docker hub account>/ubuntu_mpich_as_ssh_server,CCP_MPI_HOSTFILE_FORMAT=1,CCP_DOCKER_SKIP_SSH_SETUP=1,CCP_DOCKER_START_OPTION=--network=host
。タスクの出力を確認する
Windows コンピューティング ノードで Docker タスクをステップ バイ ステップで実行する
Windows コンピューティング ノードをクラスターに追加する
Azure IaaS VM にバーストを
して、コンテナーがインストールされたイメージを含む Windows コンピューティング ノードを追加する windowstask1 を
する
Docker タスクとしてコンテナーでコマンドを実行する
Windows コンピューティング ノードに割り当てられた Docker タスクを含むジョブを送信する
job submit /requestednodes:IaaSWinCN000 /env:CCP_DOCKER_IMAGE=mcr.microsoft.com/windows/servercore:ltsc2016 ping -t localhost
タスクの出力をピークする
windowstask2 を
する ジョブを取り消す
job cancel !!