이 빠른 시작에서는 Batch AI로 관리하는 GPU 사용 가상 머신에서 샘플 Deep Learning 모델을 학습하는 방법을 보여 줍니다. Batch AI는 데이터 과학자 및 AI 연구원이 Azure Virtual Machines 클러스터에서 AI 및 기타 기계 학습 모델을 대규모로 학습하기 위한 관리형 서비스입니다.
이 예제에서는 Azure CLI에서 MNIST 데이터베이스의 예제 TensorFlow 신경망을 학습하도록 Batch AI를 설정합니다. 이 빠른 시작을 완료하면 Batch AI를 사용하여 AI 또는 Machine Learning 모델을 학습하는 주요 개념을 이해하고 더 큰 규모의 다양한 모델을 학습할 준비를 갖출 수 있습니다.
Azure Cloud Shell 열기
Azure Cloud Shell은 이 문서의 단계를 실행하는 데 무료로 사용할 수 있는 대화형 셸입니다. 계정에서 사용할 수 있도록 공용 Azure 도구가 Cloud Shell에 사전 설치 및 구성되어 있습니다. 복사 단추를 선택하여 코드를 복사하고 Cloud Shell 붙여넣은 다음 Enter 키를 눌러 실행합니다. Cloud Shell을 여는 몇 가지 방법이 있습니다.
| 코드 블록의 오른쪽 위 모서리에서 사용을 선택합니다. |
|
| 브라우저에서 Cloud Shell을 엽니다. | ![]() |
| Azure Portal 오른쪽 위 모서리에 있는 메뉴에서 Cloud Shell 단추를 선택합니다. |
|
CLI를 로컬로 설치하여 사용하도록 선택한 경우 이 빠른 시작에서는 Azure CLI 버전 2.0.38 이상을 실행해야 합니다.
az --version을 실행하여 버전을 찾습니다. 설치 또는 업그레이드해야 하는 경우 Azure CLI 설치를 참조하세요.
이 빠른 시작에서는 Cloud Shell 또는 로컬 컴퓨터의 Bash 셸에서 명령을 실행한다고 가정합니다. Azure CLI를 사용하여 Batch AI 클러스터를 만들기 위한 빠른 시작을 이미 완료한 경우 리소스 그룹 및 Batch AI 클러스터를 만드는 처음 두 단계를 건너뜁니다.
리소스 그룹 만들기
az group create 명령을 사용하여 리소스 그룹을 만듭니다. Azure 리소스 그룹은 Azure 리소스가 배포 및 관리되는 논리적 컨테이너입니다.
다음 예제에서는 eastus2 위치에 myResourceGroup이라는 리소스 그룹을 만듭니다. 미국 동부 2 위치 또는 Batch AI 서비스를 사용할 수 있는 다른 위치를 선택합니다.
az group create \
--name myResourceGroup \
--location eastus2
Batch AI 클러스터 만들기
먼저 az batchai workspace create 명령을 사용하여 Batch AI 작업 영역을 만듭니다. Batch AI 클러스터 및 기타 리소스를 구성하기 위한 작업 영역이 필요합니다.
az batchai workspace create \
--workspace myworkspace \
--resource-group myResourceGroup
Batch AI 클러스터를 만들려면 az batchai cluster create 명령을 사용합니다. 다음 예제에서는 다음과 같은 속성을 사용하여 1노드 클러스터를 만듭니다.
- NVIDIA Tesla K80 GPU가 1개 있는 NC6 VM 크기를 사용합니다. Azure는 다양한 NVIDIA GPU를 갖는 여러 VM 크기를 제공합니다.
- 컨테이너 기반 애플리케이션을 호스트하도록 디자인된 기본 Ubuntu Server 이미지를 실행합니다. 이 배포의 학습 워크로드 대부분을 실행할 수 있습니다.
- myusername이라는 사용자 계정을 추가하고, SSH 키가 로컬 환경의 기본 키 위치(~/.ssh)에 아직 없는 경우 생성합니다.
az batchai cluster create \
--name mycluster \
--workspace myworkspace \
--resource-group myResourceGroup \
--vm-size Standard_NC6 \
--target 1 \
--user-name myusername \
--generate-ssh-keys
명령 출력은 클러스터 속성을 나타냅니다. 노드를 만들고 시작하는 데 몇 분 정도 걸립니다. 클러스터 상태를 확인하려면 az batchai cluster show 명령을 실행합니다.
az batchai cluster show \
--name mycluster \
--workspace myworkspace \
--resource-group myResourceGroup \
--output table
클러스터 생성 초기 단계에 출력은 다음과 비슷하여 resizing의 클러스터를 표시합니다.
Name Resource Group Workspace VM Size State Idle Running Preparing Leaving Unusable
--------- ---------------- ----------- ------------ ------- ------ --------- ----------- --------- ----------
mycluster myResourceGroup myworkspace STANDARD_NC6 resizing 0 0 0 0 0
다음 단계를 계속 진행하여 학습 스크립트를 업로드하고 클러스터 상태가 변경되는 동안 학습 작업을 만듭니다. 클러스터는 상태가 steady이고 단일 노드가 Idle일 때 학습 작업을 실행할 준비가 된 것입니다.
학습 스크립트 업로드
az storage account create 명령을 사용하여 학습 스크립트 및 학습 출력을 저장하기 위한 스토리지 계정을 만듭니다.
az storage account create \
--resource-group myResourceGroup \
--name mystorageaccount \
--location eastus2 \
--sku Standard_LRS
az storage share create 명령을 사용하여 계정에 myshare라는 Azure 파일 공유를 만듭니다.
az storage share create \
--name myshare \
--account-name mystorageaccount
az storage directory create 명령을 사용하여 Azure 파일 공유에 디렉터리를 만듭니다. 학습 스크립트의 scripts 디렉터리를 만들고 학습 출력을 위한 logs를 만듭니다.
# Create /scripts directory in file share
az storage directory create \
--name scripts \
--share-name myshare \
--account-name mystorageaccount
# Create /logs directory in file share
az storage directory create \
--name logs \
--share-name myshare \
--account-name mystorageaccount
Bash 셸에서 로컬 작업 디렉터리를 만들고 TensorFlow convolutional.py 샘플을 다운로드합니다. Python 스크립트는 0부터 9까지 손으로 쓴 60,000개의 숫자로 이루어진 MNIST 이미지 집합을 콘볼루션 신경망에 학습시킵니다. 그런 다음, 테스트 예제 집합을 대상으로 모델을 테스트합니다.
wget https://raw.githubusercontent.com/tensorflow/models/master/tutorials/image/mnist/convolutional.py
az storage file upload 명령을 사용하여 공유의 scripts 디렉터리에 스크립트를 업로드합니다.
az storage file upload \
--share-name myshare \
--path scripts \
--source convolutional.py \
--account-name mystorageaccount
교육 작업 제출
먼저, az batchai experiment create 명령을 사용하여 작업 영역에 Batch AI 실험을 만듭니다. 실험은 관련 Batch AI 작업에 대한 논리적 컨테이너입니다.
az batchai experiment create \
--name myexperiment \
--workspace myworkspace \
--resource-group myResourceGroup
작업 디렉터리에서 다음 내용의 학습 작업 구성 파일 job.json을 만듭니다. 학습 작업을 제출할 때 이 구성 파일을 전달합니다.
이 job.json 파일에는 Python 스크립트 파일을 찾아 GPU 노드의 TensorFlow 컨테이너에서 실행하기 위한 설정이 포함되어 있습니다. 또한 Azure Storage에 작업의 출력 파일을 저장할 위치도 지정합니다.
<AZURE_BATCHAI_STORAGE_ACCOUNT>는 작업 제출 동안 스토리지 계정 이름이 지정될 것임을 나타냅니다.
{
"$schema": "https://raw.githubusercontent.com/Azure/BatchAI/master/schemas/2018-05-01/job.json",
"properties": {
"nodeCount": 1,
"tensorFlowSettings": {
"pythonScriptFilePath": "$AZ_BATCHAI_JOB_MOUNT_ROOT/myshare/scripts/convolutional.py"
},
"stdOutErrPathPrefix": "$AZ_BATCHAI_JOB_MOUNT_ROOT/myshare/logs",
"mountVolumes": {
"azureFileShares": [
{
"azureFileUrl": "https://<AZURE_BATCHAI_STORAGE_ACCOUNT>.file.core.windows.net/myshare",
"relativeMountPath": "myshare"
}
]
},
"containerSettings": {
"imageSourceRegistry": {
"image": "tensorflow/tensorflow:1.8.0-gpu"
}
}
}
}
az batchai job create 명령을 사용하여 노드에 작업을 제출하고, job.json 구성 파일 및 스토리지 계정 이름을 전달합니다.
az batchai job create \
--name myjob \
--cluster mycluster \
--experiment myexperiment \
--workspace myworkspace \
--resource-group myResourceGroup \
--config-file job.json \
--storage-account-name mystorageaccount
이 명령은 작업 속성을 반환한 후 몇 분 후에 완료됩니다. 이 작업의 진행률을 모니터링하려면 az batchai job file stream 명령을 사용하여 노드의 표준 출력 디렉터리에서 stdout-wk-0.txt 파일을 스트리밍합니다. 학습 스크립트는 작업 실행이 시작된 후 이 파일을 생성합니다.
az batchai job file stream \
--job myjob \
--experiment myexperiment \
--workspace myworkspace \
--resource-group myResourceGroup \
--file-name stdout-wk-0.txt
예제 출력:
File found with URL "https://mystorageaccount.file.core.windows.net/logs/00000000-0000-0000-0000-000000000000/myResourceGroup/workspaces/myworkspace/experiments/myexperiment/jobs/myjob/<JOB_ID>/stdouterr/stdout-wk-0.txt?sv=2016-05-31&sr=f&sig=Kih9baozMao8Ugos%2FVG%2BcsVsSeY1O%2FTocCNvLQhwtx4%3D&se=2018-06-20T22%3A07%3A30Z&sp=rl". Start streaming
Successfully downloaded train-images-idx3-ubyte.gz 9912422 bytes.
Successfully downloaded train-labels-idx1-ubyte.gz 28881 bytes.
Successfully downloaded t10k-images-idx3-ubyte.gz 1648877 bytes.
Successfully downloaded t10k-labels-idx1-ubyte.gz 4542 bytes.
Extracting data/train-images-idx3-ubyte.gz
Extracting data/train-labels-idx1-ubyte.gz
Extracting data/t10k-images-idx3-ubyte.gz
Extracting data/t10k-labels-idx1-ubyte.gz
Initialized!
Step 0 (epoch 0.00), 14.9 ms
Minibatch loss: 8.334, learning rate: 0.010000
Minibatch error: 85.9%
Validation error: 84.6%
Step 100 (epoch 0.12), 9.7 ms
Minibatch loss: 3.240, learning rate: 0.010000
Minibatch error: 6.2%
Validation error: 7.7%
Step 200 (epoch 0.23), 8.3 ms
Minibatch loss: 3.335, learning rate: 0.010000
Minibatch error: 7.8%
Validation error: 4.5%
Step 300 (epoch 0.35), 8.3 ms
Minibatch loss: 3.157, learning rate: 0.010000
Minibatch error: 3.1%
...
Step 8500 (epoch 9.89), 8.3 ms
Minibatch loss: 1.605, learning rate: 0.006302
Minibatch error: 0.0%
Validation error: 0.9%
Test error: 0.8%
작업이 완료되면 스트리밍이 중지됩니다. 이 샘플 스크립트는 10개가 넘는 Epoch를 학습하거나 학습 데이터 집합을 통과합니다. 이 예제에서는 10개 Epoch 후에 학습된 모델이 0.8%의 테스트 오류만 나타내며 수행됩니다.
작업 출력 가져오기
Batch AI는 스토리지 계정에 각 작업 출력용으로 고유한 폴더 구조를 만듭니다. 이 경로를 사용하여 JOB_OUTPUT_PATH 환경 변수를 설정합니다. 그런 다음, az storage file list 명령을 사용하여 스토리지의 출력 파일을 나열합니다.
export JOB_OUTPUT_PATH=$(az batchai job show --name myjob --experiment myexperiment --workspace myworkspace --resource-group myResourceGroup --query jobOutputDirectoryPathSegment --output tsv)
az storage file list \
--share-name myshare/logs \
--account-name mystorageaccount \
--path $JOB_OUTPUT_PATH/stdouterr \
--output table
출력은 다음과 비슷합니다.
Name Content Length Type Last Modified
--------------- ---------------- ------ ---------------
execution.log 14866 file
stderr-wk-0.txt 1527 file
stdout-wk-0.txt 11027 file
az storage file download 명령을 사용하여 하나 이상의 파일을 로컬 작업 디렉터리에 다운로드합니다. 예를 들면 다음과 같습니다.
az storage file download \
--share-name myshare/logs \
--account-name mystorageaccount \
--path $JOB_OUTPUT_PATH/stdouterr/stdout-wk-0.txt
리소스 정리
Batch AI 자습서 및 샘플을 계속 사용하려면 Batch AI 작업 영역, 클러스터 및 이 빠른 시작에서 만든 스토리지 계정을 사용합니다.
노드가 실행되는 동안 Batch AI 클러스터 요금이 청구됩니다. 실행할 작업이 없는 경우 클러스터 구성을 유지하려면 클러스터 크기를 0개 노드로 조정합니다.
az batchai cluster resize \
--name mycluster \
--workspace myworkspace \
--resource-group myResourceGroup \
--target 0
나중에 작업을 실행하려면 클러스터 크기를 하나 이상의 노드로 조정합니다. 클러스터가 더 이상 필요하지 않으면 az batchai cluster delete 명령을 사용하여 삭제합니다.
az batchai cluster delete \
--name mycluster \
--workspace myworkspace \
--resource-group myResourceGroup
더 이상 필요하지 않은 경우 az group delete 명령을 사용하여 Batch AI 및 스토리지 리소스의 리소스 그룹을 제거할 수 있습니다.
az group delete --name myResourceGroup
다음 단계
이 빠른 시작에서는 Batch AI를 사용하여 Azure CLI에서 단일 GPU VM에서 예제 TensorFlow Deep Learning 모델을 학습했습니다. 더 큰 GPU 클러스터에서 모델 학습을 분산하는 방법을 자세히 알아보려면 Batch AI 자습서를 계속 진행합니다.
