기계 학습 모델 학습은 반복적인 프로세스이며 상당한 실험이 필요합니다. Azure Machine Learning 대화형 작업 환경을 통해 데이터 과학자는 Azure Machine Learning Python SDK, Azure Machine Learning CLI 또는 Azure Studio를 사용하여 작업이 실행 중인 컨테이너에 액세스할 수 있습니다. 작업 컨테이너에 액세스하면 사용자는 학습 스크립트를 반복하거나, 학습 진행률을 모니터링하거나, 로컬 컴퓨터에서 일반적으로 수행하는 것처럼 원격으로 작업을 디버그할 수 있습니다. 작업은 JupyterLab, TensorBoard, VS Code를 비롯한 다양한 학습 애플리케이션을 통해 또는 SSH를 통해 작업 컨테이너에 직접 연결하여 상호 작용할 수 있습니다.
자세한 내용은 Azure Machine Learning 확장 설정에 대한 VS Code 링크를 참조하세요.
작업 환경에 openssh-server 및 ipykernel ~=6.0 패키지가 설치되어 있는지 확인합니다(모든 Azure Machine Learning 큐레이팅 학습 환경에는 기본적으로 이러한 패키지가 설치되어 있음).
배포 유형이 PyTorch, TensorFlow 또는 MPI 이외의 경우에는 분산 학습 실행에서 대화형 애플리케이션을 사용하도록 설정할 수 없습니다. 사용자 지정 분산 학습 설정(위의 배포 프레임워크를 사용하지 않고 다중 노드 학습 구성)은 현재 지원되지 않습니다.
SSH를 사용하려면 SSH 키 쌍이 필요합니다.
ssh-keygen -f "<filepath>" 명령을 사용하여 공용 및 프라이빗 키 쌍을 생성할 수 있습니다.
작업 컨테이너와 상호 작용
작업을 만들 때 대화형 애플리케이션을 지정하면 작업이 실행 중인 컴퓨팅 노드의 컨테이너에 직접 연결할 수 있습니다. 작업 컨테이너에 대한 액세스 권한이 있으면 작업이 실행되는 동일한 환경에서 작업을 테스트하거나 디버그할 수 있습니다. VS Code를 사용하여 실행 중인 프로세스에 연결하고 로컬로 디버그할 수도 있습니다.
컴퓨팅 형식으로 컴퓨팅 클러스터 또는 연결된 컴퓨팅(Kubernetes)을 선택하고 컴퓨팅 대상을 선택한 다음 Instance count에 필요한 노드 수를 지정합니다.
마법사에 따라 작업을 시작할 환경을 선택합니다.
학습 스크립트 단계에서 학습 코드(및 입출력 데이터)를 추가하고 명령에서 참조하여 작업에 탑재되었는지 확인합니다.
명령의 끝에 sleep <specific time>을 배치하여 컴퓨팅 리소스를 예약할 시간을 지정할 수 있습니다. 다음 형식을 따릅니다.
sleep 1s
sleep 1m
sleep 1h
sleep 1d
작업을 무기한으로 유지하는 sleep infinity 명령을 사용할 수도 있습니다.
참고 항목
sleep infinity를 사용하는 경우 컴퓨팅 리소스를 삭제하고 청구를 중지하려면 작업을 수동으로 취소해야 합니다.
컴퓨팅 설정에서 학습 애플리케이션 옵션을 확장합니다. 작업과 상호 작용하는 데 사용할 학습 애플리케이션을 하나 이상 선택합니다. 애플리케이션을 선택하지 않으면 디버그 기능을 사용할 수 없습니다.
작업을 검토하고 만듭니다.
작업에 사용할 대화형 서비스를 정의합니다.
your compute name을 사용자 고유의 값으로 바꿉니다. 사용자 고유의 사용자 지정 환경을 사용하려면 이 자습서의 예제에 따라 사용자 지정 환경을 만듭니다.
SDK를 통해 대화형 서비스를 구성하려면 azure.ai.ml.entities 패키지에서 JobService 클래스를 가져와야 합니다.
command_job = command(...
code="./src", # local path where the code is stored
command="python main.py", # you can add a command like "sleep 1h" to reserve the compute resource is reserved after the script finishes running
environment="AzureML-tensorflow-2.7-ubuntu20.04-py38-cuda11-gpu@latest",
compute="<name-of-compute>",
services={
"My_jupyterlab": JupyterLabJobService(
nodes="all" # For distributed jobs, use the `nodes` property to pick which node you want to enable interactive services on. If `nodes` are not selected, by default, interactive applications are only enabled on the head node. Values are "all", or compute node index (for ex. "0", "1" etc.)
),
"My_vscode": VsCodeJobService(
nodes="all"
),
"My_tensorboard": TensorBoardJobService(
nodes="all",
log_dir="output/tblogs" # relative path of Tensorboard logs (same as in your training script)
),
"My_ssh": SshJobService(
ssh_public_keys="<add-public-key>",
nodes="all"
),
}
)
# submit the command
returned_job = ml_client.jobs.create_or_update(command_job)
services 섹션에서는 상호 작용할 학습 애플리케이션을 지정합니다.
명령의 끝에 sleep <specific time>을 배치하여 컴퓨팅 리소스를 예약할 시간을 지정할 수 있습니다. 다음 형식을 따릅니다.
sleep 1s
sleep 1m
sleep 1h
sleep 1d
작업을 무기한으로 유지하는 sleep infinity 명령을 사용할 수도 있습니다.
참고 항목
sleep infinity를 사용하는 경우 컴퓨팅 리소스를 삭제하고 청구를 중지하려면 작업을 수동으로 취소해야 합니다.
학습 작업 제출 Python SDK를 사용하여 학습하는 방법에 대한 자세한 내용은 이 문서를 참조하세요.
샘플 콘텐츠를 사용하여 작업 yaml job.yaml을 만듭니다.
your compute name을 사용자 고유의 값으로 바꿉니다. 사용자 지정 환경을 사용하려면 이 자습서의 예제에 따라 사용자 지정 환경을 만듭니다.
code: src
command:
python train.py
# you can add a command like "sleep 1h" to reserve the compute resource is reserved after the script finishes running.
environment: azureml:AzureML-tensorflow-2.4-ubuntu18.04-py37-cuda11-gpu:41
compute: azureml:<your compute name>
services:
my_vs_code:
type: vs_code
nodes: all # For distributed jobs, use the `nodes` property to pick which node you want to enable interactive services on. If `nodes` are not selected, by default, interactive applications are only enabled on the head node. Values are "all", or compute node index (for ex. "0", "1" etc.)
my_tensor_board:
type: tensor_board
log_dir: "output/tblogs" # relative path of Tensorboard logs (same as in your training script)
nodes: all
my_jupyter_lab:
type: jupyter_lab
nodes: all
my_ssh:
type: ssh
ssh_public_keys: <paste the entire pub key content>
nodes: all
services 섹션에서는 상호 작용할 학습 애플리케이션을 지정합니다.
명령의 끝에 sleep <specific time>을 배치하여 컴퓨팅 리소스를 예약할 시간을 지정할 수 있습니다. 다음 형식을 따릅니다.
sleep 1s
sleep 1m
sleep 1h
sleep 1d
작업을 무기한으로 유지하는 sleep infinity 명령을 사용할 수도 있습니다.
참고 항목
sleep infinity를 사용하는 경우 컴퓨팅 리소스를 삭제하고 청구를 중지하려면 작업을 수동으로 취소해야 합니다.
az ml job create --file <path to your job yaml file> --workspace-name <your workspace name> --resource-group <your resource group name> --subscription <sub-id> 명령을 실행하여 학습 작업을 제출합니다. CLI를 통한 작업 실행에 대한 자세한 내용은 이 문서를 참조하세요.
실행 중인 작업과 상호 작용하려면 작업 세부 정보 페이지에서 디버그 및 모니터링 단추를 선택합니다.
패널에서 애플리케이션을 클릭하면 애플리케이션에 대한 새 탭이 열립니다. 애플리케이션이 실행 중 상태이고 작업 소유자만 애플리케이션에 액세스할 수 있는 권한이 있는 경우에만 애플리케이션에 액세스할 수 있습니다. 여러 노드에서 학습하는 경우 상호 작용하려는 특정 노드를 선택할 수 있습니다.
작업을 만드는 동안 지정된 작업 및 학습 애플리케이션을 시작하는 데 몇 분 정도 걸릴 수 있습니다.
작업이 제출되면 ml_client.jobs.show_services("<job name>", <compute node index>)를 사용하여 대화형 서비스 엔드포인트를 볼 수 있습니다.
SSH를 통해 작업이 실행 중인 컨테이너에 연결하려면 az ml job connect-ssh --name <job-name> --node-index <compute node index> --private-key-file-path <path to private key> 명령을 실행합니다. Azure Machine Learning CLI를 설정하려면 이 가이드를 따릅니다.
애플리케이션이 실행 중 상태이고 작업 소유자만 애플리케이션에 액세스할 수 있는 권한이 있는 경우에만 애플리케이션에 액세스할 수 있습니다. 여러 노드에서 학습하는 경우 노드 인덱스를 전달하여 상호 작용할 특정 노드를 선택할 수 있습니다.
작업이 실행 중일 때 az ml job show-services --name <job name> --node-index <compute node index> 명령을 실행하여 애플리케이션으로 URL을 가져옵니다. 엔드포인트 URL은 출력의 services 아래에 표시됩니다. VS Code의 경우 제공된 URL을 복사하여 브라우저에 붙여넣어야 합니다.
SSH를 통해 작업이 실행 중인 컨테이너에 연결하려면 az ml job connect-ssh --name <job-name> --node-index <compute node index> --private-key-file-path <path to private key> 명령을 실행합니다.
애플리케이션이 실행 중 상태이고 작업 소유자만 애플리케이션에 액세스할 수 있는 권한이 있는 경우에만 애플리케이션에 액세스할 수 있습니다. 여러 노드에서 학습하는 경우 노드 인덱스를 전달하여 상호 작용할 특정 노드를 선택할 수 있습니다.
애플리케이션과 상호 작용
작업할 때 상호 작용할 엔드포인트를 선택하면 작업 디렉터리 아래의 사용자 컨테이너로 이동하여 코드, 입력, 출력 및 로그에 액세스할 수 있습니다. 애플리케이션에 연결하는 동안 문제가 발생하면 출력 + 로그 탭의 system_logs->interactive_capability 대화형 기능 및 애플리케이션 로그를 찾을 수 있습니다.
Jupyter Lab에서 터미널을 열고 작업 컨테이너 내에서 상호 작용을 시작할 수 있습니다. Jupyter Lab을 사용하여 학습 스크립트를 직접 반복할 수도 있습니다.
VS Code 내에서 작업 컨테이너와 상호 작용할 수도 있습니다. 작업 제출 중에 작업에 디버거를 연결하고 실행을 일시 중지하려면 여기로 이동합니다.
참고 항목
VS Code를 사용하여 작업 컨테이너와 상호 작용하는 경우 프라이빗 링크 사용 작업 영역은 현재 지원되지 않습니다.
작업에 대한 텐서플로 이벤트를 로그한 경우 TensorBoard를 사용하여 작업이 실행될 때 메트릭을 모니터링할 수 있습니다.
작업 종료
대화형 학습이 완료되면 작업 세부 정보 페이지로 이동하여 컴퓨팅 리소스를 해제할 작업을 취소할 수도 있습니다. 또는 CLI에서 az ml job cancel -n <your job name>을 사용하거나 SDK에서 ml_client.job.cancel("<job name>")을 사용합니다.
작업에 디버거 연결
디버거가 연결되어 있고 실행이 일시 중지된 작업을 제출하려면 debugpy 및 VS Code(debugpy를 작업 환경에 설치해야 함)를 사용할 수 있습니다.
참고 항목
VS Code의 작업에 디버거를 연결할 때 프라이빗 링크 사용 작업 영역은 현재 지원되지 않습니다.
작업 제출 중에(UI, CLI 또는 SDK를 통해) debugpy 명령을 사용하여 Python 스크립트를 실행합니다. 예를 들어 다음 스크린샷은 debugpy를 사용하여 텐서플로 스크립트에 대한 디버거를 연결하는 샘플 명령을 보여 줍니다(tfevents.py를 학습 스크립트의 이름으로 바꿀 수 있습니다).