Open5

Azure Virtual Machines で Docker & GPU の環境を作る

koki-algebrakoki-algebra

NVIDIA Driver のインストール

Secure Boot の無効化

Secure Boot を無効化しないと NVIDIA Driver が正しくインストールされない. コンソールから無効化できる.

NVIDIA Driver のインストール

  1. ubuntu-drivers コマンドのインストール
    sudo apt install ubuntu-drivers-common
    
  2. インストール可能な NVIDIA Driver を確認
    ubuntu-drivers devices
    
  3. ドライバーをインストール (ex.
    sudo apt install nvidia-driver-535
    
  4. VM を再起動
    コンソールから再起動する.
  5. インストールを確認
    nvidia-smi
    
koki-algebrakoki-algebra

Docker のインストール

  1. 公式ドキュメントに従ってインストールする
    https://docs.docker.com/engine/install/ubuntu/
  2. azureuser を Docker Group に追加する
    sudo gpasswd -a azureuser docker
    
    Docker の再起動
    sudo systemctl restart docker
    
    SSH で再接続すると sudo なしで docker コマンドが実行できるようになる.
koki-algebrakoki-algebra

Azure Container Registry からイメージを Pull する

User Assigned Identity で ACR にアクセスしたい

必要なこと

  1. VM に Azure CLI をインストール
  2. User Assigned ID を作成する
  3. VM に User Assigned ID を割り当てる
  4. User Assigned ID に ACR へのアクセス権を与える

公式ドキュメント

https://learn.microsoft.com/ja-jp/azure/container-registry/container-registry-authentication-managed-identity

事前に定義しておく変数

# Resource Group の名前
RESOURCE_GROUP=

# User Assigned ID の名前
USER_ID_NAME=

# VM の名前
VM_NAME=

# ACR の名前
CONTAINER_REGISTRY=

VM に Azure CLI をインストール

https://learn.microsoft.com/ja-jp/cli/azure/install-azure-cli-linux?pivots=apt

User Assigned ID を作成する

az identity create --resource-group $RESOURCE_GROUP --name $USER_ID_NAME

VM に User Assigned ID を割り当てる

User Assigned ID の Resource ID を取得

USER_ID=$(az identity show --resource-group  $RESOURCE_GROUP --name $USER_ID_NAME --query id --output tsv)

User Assigned ID の Service Principal ID を取得

SP_ID=$(az identity show --resource-group $RESOURCE_GROUP --name $USER_ID_NAME --query principalId --output tsv)
az vm identity assign --resource-group $RESOURCE_GROUP --name $VM_NAME --identities $USER_ID

User Assigned ID に ACR へのアクセス権を与える

ACR の Resource ID を取得

ACR_ID=$(az acr show --resource-group $RESOURCE_GROUP --name $CONTAINER_REGISTRY --query id --output tsv)

ACR から Pull を行う権限を付与

az role assignment create --assignee $SP_ID --scope $ACR_ID --role acrpull

VM から ACR にアクセス

VM 上で Azure CLI の認証

VM
az login --identity --username $USER_ID

ACR の認証

VM
az acr login --name $CONTAINER_REGISTRY

これで VM から ACR にアクセス可能になった

VM
docker pull <registry-name>.azurecr.io/<image-name>:<image-tag>