이 페이지에서는 대화형 셸을 사용해서 학습 코드가 실행되는 컨테이너를 조사하는 방법을 보여줍니다. Vertex AI에서 실행되는 각 사전 빌드된 컨테이너 또는 커스텀 컨테이너에서 파일 시스템을 탐색하고 디버깅 유틸리티를 실행할 수 있습니다.
대화형 셸을 사용하여 학습 컨테이너를 검사하면 학습 코드 또는 Vertex AI 구성 문제를 디버깅하는 데 도움이 됩니다. 예를 들어 대화형 셸을 사용하여 다음을 수행할 수 있습니다.
- 추적 및 프로파일링 도구 실행
- GPU 사용량 분석
- 컨테이너에 제공되는 Google Cloud 권한 확인
Cloud Profiler를 사용하여 커스텀 학습 작업의 모델 학습 성능을 디버그할 수도 있습니다. 자세한 내용은 프로파일러를 사용하여 모델 학습 성능 프로파일링을 참고하세요.
시작하기 전에
CustomJob
리소스, HyperparameterTuningJob
리소스, 커스텀 TrainingPipeline
리소스로 커스텀 학습을 수행할 때 대화형 셸을 사용할 수 있습니다. 학습 코드를 준비하고 선택한 커스텀 학습 리소스를 구성할 때는 다음 요구사항을 충족해야 합니다.
학습 컨테이너에
bash
가 설치되어 있는지 확인합니다.모든 사전 빌드된 학습 컨테이너에
bash
가 설치되어 있습니다. 학습용 커스텀 컨테이너를 만드는 경우bash
가 포함된 기본 컨테이너를 사용하거나 Dockerfile에bash
를 설치합니다.대화형 셸을 지원하는 리전에서 커스텀 학습을 수행합니다.
대화형 셸에 액세스하려는 모든 사용자에게 커스텀 학습이 실행되는 Google Cloud 프로젝트에 대해 다음 권한이 있는지 확인합니다.
aiplatform.customJobs.create
aiplatform.customJobs.get
aiplatform.customJobs.cancel
커스텀 학습을 직접 시작하는 경우 이미 이러한 권한이 있을 가능성이 크므로 대화형 셸에 액세스할 수 있습니다. 그러나 대화형 셸을 사용하여 조직 내 다른 사람이 만든 커스텀 학습 리소스를 검사하려면 이러한 권한을 가져와야 할 수 있습니다.
이러한 권한을 얻는 한 가지 방법은 조직의 관리자에게 Vertex AI 사용자 역할(
roles/aiplatform.user
)을 부여해 달라고 요청하는 것입니다.
고급 사례 요구사항
특정 고급 기능을 사용하는 경우 다음 추가 요구사항을 충족합니다.
커스텀 학습 리소스에 커스텀 서비스 계정을 연결하는 경우 대화형 셸에 액세스하려는 모든 사용자에게 연결된 서비스 계정에 대해
iam.serviceAccounts.actAs
권한이 있는지 확인합니다.커스텀 서비스 계정 가이드에는 서비스 계정을 연결하기 위해 이 권한이 필요하다고 표시됩니다. 또한 커스텀 학습 중 대화형 셸을 보기 위해 이 권한이 필요합니다.
예를 들어 서비스 계정이 연결된
CustomJob
을 만들려면 서비스 계정에 대해iam.serviceAccounts.actAs
권한이 있어야 합니다. 동료 중 한 명이 이CustomJob
에 대해 대화형 셸을 보려면 동일한iam.serviceAccounts.actAs
권한이 있어야 합니다.Vertex AI에서 VPC 서비스 제어를 사용하도록 프로젝트를 구성한 경우 다음 추가 제한사항을 고려하세요.
커스텀 학습에는 비공개 IP를 사용할 수 없습니다. VPC 피어링과 함께 VPC-SC가 필요한 경우 대화형 셸을 사용하기 위한 추가 설정이 필요합니다. Ray 대시보드 및 VPC-SC + VPC 피어링을 사용한 대화형 셸에 설명된 안내에 따라 사용자 프로젝트에서 VPC-SC 및 VPC 피어링을 사용한 대화형 셸 설정을 구성합니다.
대화형 셸 내에서 공개 인터넷 또는 서비스 경계 외부의 Google Cloud 리소스에 액세스할 수 없습니다.
대화형 셸 액세스를 보호하려면
aiplatform.googleapis.com
외에도 서비스 경계에서 제한된 서비스로notebooks.googleapis.com
을 추가해야 합니다.aiplatform.googleapis.com
만 제한하고notebooks.googleapis.com
을 제한하지 않으면 사용자가 서비스 경계 외부의 머신에서 대화형 셸에 액세스하여 VPC 서비스 제어를 사용하는 데 따른 보안 이점을 줄여줍니다.
대화형 셸 사용 설정
커스텀 학습 리소스에 대화형 셸을 사용 설정하려면 CustomJob
, HyperparameterTuningJob
또는 커스텀 TrainingPipeline
을 만들 때 enableWebAccess
API 필드를 true
로 설정합니다.
다음 예시에서는 여러 다른 도구를 사용하여 이를 수행하는 방법을 보여줍니다.
Console
Google Cloud Console에서 커스텀 TrainingPipeline
만들기 가이드를 따릅니다. 새 모델 학습 창에서 모델 세부정보 단계에 도달하면 다음을 수행합니다.
고급 옵션을 클릭합니다.
학습 디버깅 사용 설정 체크박스를 선택합니다.
그런 후 새 모델 학습 워크플로의 나머지를 완료합니다.
gcloud
CustomJob
을 만들려면gcloud ai custom-jobs create
명령어를 실행하고 이 명령어에--enable-web-access
플래그를 지정합니다.HyperparameterTuningJob
을 만들려면gcloud ai hp-tuning-jobs create
명령어를 실행하고 이 명령어에--enable-web-access
플래그를 지정합니다.
이러한 명령어를 사용하는 방법은 CustomJob
만들기 가이드와 HyperparameterTuningJob
만들기를 참조하세요.
API
다음의 부분적인 REST 요청 본문에 각 커스텀 학습 리소스 유형에 enableWebAccess
필드를 지정하는 위치가 나와 있습니다.
CustomJob
다음 예시는 projects.locations.customJobs.create
API 메서드에 대한 부분 요청 본문입니다.
{
...
"jobSpec": {
...
"enableWebAccess": true
}
...
}
CustomJob
을 만들기 위한 API 요청 전송 예시는 커스텀 학습 작업 만들기를 참조하세요.
HyperparameterTuningJob
다음 예시는 projects.locations.hyperparameterTuningJobs.create
API 메서드에 대한 부분 요청 본문입니다.
{
...
"trialJobSpec": {
...
"enableWebAccess": true
}
...
}
HyperparameterTuningJob
을 만들기 위한 API 요청 전송 예시는 초매개변수 조정 사용을 참조하세요.
커스텀 TrainingPipeline
다음 예시에서는 projects.locations.trainingPipelines.create
API 메서드의 부분 요청 본문을 보여줍니다.
초매개변수 조정을 사용하는지 여부에 따라 다음 탭 중 하나를 선택합니다.
초매개변수 조정 사용 안함
{
...
"trainingTaskInputs": {
...
"enableWebAccess": true
}
...
}
초매개변수 조정 사용
{
...
"trainingTaskInputs": {
...
"trialJobSpec": {
...
"enableWebAccess": true
}
}
...
}
커스텀 TrainingPipeline
을 만들기 위해 API 요청을 전송하는 예시는 학습 파이프라인 만들기를 참조하세요.
Python
Vertex AI SDK for Python을 설치하거나 업데이트하는 방법은 Vertex AI SDK for Python 설치를 참조하세요. 자세한 내용은 Python API 참고 문서를 확인하세요.
다음 메서드 중 하나를 실행할 때 enable_web_access
매개변수를 true
로 설정합니다.
CustomJob
을 만들려면CustomJob.run
메서드를 사용합니다.HyperparameterTuningJob
을 만들려면HyperparameterTuningJob.run
메서드를 사용합니다.커스텀
TrainingPipeline
을 만들려면 다음 메서드 중 하나를 사용합니다.
대화형 셸로 이동
이전 섹션의 안내에 따라 커스텀 학습을 시작한 후 Vertex AI는 대화형 셸 액세스를 위해 사용할 수 있는 하나 이상의 URI를 생성합니다. Vertex AI는 작업에서 각 학습 노드에 대해 고유한 URI를 생성합니다.
다음 방법 중 하나로 대화형 셸로 이동할 수 있습니다.
- Google Cloud Console에서 링크를 클릭합니다.
- Vertex AI API를 사용하여 셸의 웹 액세스 URI를 가져옵니다.
Google Cloud Console에서 탐색
Google Cloud Console의 Vertex AI 섹션에서 다음 페이지 중 하나로 이동합니다.
초매개변수 조정을 사용하지 않는 경우 커스텀 작업 페이지로 이동합니다.
초매개변수 조정을 사용하는 경우 초매개변수 조정 작업 페이지로 이동합니다.
커스텀 학습 리소스의 이름을 클릭합니다.
커스텀 학습을 위해
TrainingPipeline
을 만든 경우TrainingPipeline
으로 생성된CustomJob
또는HyperparameterTuningJob
의 이름을 클릭합니다. 파이프라인에PIPELINE_NAME
이름이 포함된 경우PIPELINE_NAME-custom-job
또는PIPELINE_NAME-hyperparameter-tuning-job
으로 불릴 수 있습니다.작업 페이지에서 웹 터미널 실행을 클릭합니다. 작업에 여러 노드가 사용되는 경우 대화형 셸을 원하는 노드 옆에서 웹 터미널 실행을 클릭합니다.
작업이 실행되는 동안에만 대화형 셸에 액세스할 수 있습니다. 웹 터미널 실행이 표시되지 않으면 Vertex AI가 작업 실행을 아직 시작하지 않았거나 작업이 이미 완료되었거나 실패했기 때문일 수 있습니다. 작업의 상태가
Queued
또는Pending
이면 1분 정도 기다린 후 페이지를 새로고침합니다.초매개변수 조정을 사용하는 경우 각 시도에 대해 개별 웹 터미널 실행 링크가 있습니다.
API에서 웹 액세스 URI 가져오기
projects.locations.customJobs.get
API 메서드 또는 projects.locations.hyperparameterTuningJobs.get
API 메서드를 사용하여 대화형 셸에 액세스하기 위해 사용할 수 있는 URI를 확인합니다.
사용 중인 커스텀 학습 리소스의 유형에 따라 다음 탭 중 하나를 선택하여 작업에서 각 노드의 대화형 셸 URI가 포함된 webAccessUris
API 필드를 찾는 방법의 예시를 확인합니다.
CustomJob
다음 탭에서는 projects.locations.customJobs.get
요청을 보내는 다양한 방법을 보여줍니다.
gcloud
gcloud ai custom-jobs describe
명령어를 실행합니다.
gcloud ai custom-jobs describe JOB_ID \
--region=LOCATION \
--format=json
다음을 바꿉니다.
JOB_ID: 작업의 숫자 ID입니다. 이 ID는 작업의
name
필드 중 마지막 부분입니다. 작업을 만들 때 ID를 보았을 수 있습니다. 작업 ID를 모르는 경우gcloud ai custom-jobs list
명령어를 실행하여 적절한 작업을 찾을 수 있습니다.LOCATION: 작업을 만든 리전입니다.
REST
요청 데이터를 사용하기 전에 다음을 바꿉니다.
LOCATION: 작업을 만든 리전입니다.
PROJECT_ID: 프로젝트 ID
JOB_ID: 작업의 숫자 ID입니다. 이 ID는 작업의
name
필드 중 마지막 부분입니다. 작업을 만들 때 ID를 보았을 수 있습니다.
HTTP 메서드 및 URL:
GET https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/customJobs/JOB_ID
요청을 보내려면 다음 옵션 중 하나를 펼칩니다.
출력에서 다음을 확인합니다.
{
...
"state": "JOB_STATE_RUNNING",
...
"webAccessUris": {
"workerpool0-0": "INTERACTIVE_SHELL_URI"
}
}
webAccessUris
필드가 표시되지 않으면 Vertex AI에서 작업 실행이 아직 시작되지 않았기 때문일 수 있습니다. state
필드에 JOB_STATE_RUNNING
이 표시되는지 확인합니다. 상태가 JOB_STATE_QUEUED
또는 JOB_STATE_PENDING
이면 1분 동안 기다린 다음 프로젝트 정보를 다시 가져옵니다.
HyperparameterTuningJob
다음 탭에서는 projects.locations.hyperparameterTuningJobs.get
요청을 보내는 다양한 방법을 보여줍니다.
gcloud
gcloud ai hp-tuning-jobs describe
명령어를 실행합니다.
gcloud ai hp-tuning-jobs describe JOB_ID \
--region=LOCATION \
--format=json
다음을 바꿉니다.
JOB_ID: 작업의 숫자 ID입니다. 이 ID는 작업의
name
필드 중 마지막 부분입니다. 작업을 만들 때 ID를 보았을 수 있습니다. 작업 ID를 모르는 경우gcloud ai hp-tuning-jobs list
명령어를 실행하여 적절한 작업을 찾을 수 있습니다.LOCATION: 작업을 만든 리전입니다.
REST
요청 데이터를 사용하기 전에 다음을 바꿉니다.
LOCATION: 작업을 만든 리전입니다.
PROJECT_ID: 프로젝트 ID
JOB_ID: 작업의 숫자 ID입니다. 이 ID는 작업의
name
필드 중 마지막 부분입니다. 작업을 만들 때 ID를 보았을 수 있습니다.
HTTP 메서드 및 URL:
GET https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/hyperparameterTuningJobs/JOB_ID
요청을 보내려면 다음 옵션 중 하나를 펼칩니다.
출력에서 다음을 확인합니다.
{
...
"state": "JOB_STATE_RUNNING",
...
"trials": [
...
{
...
"state": "ACTIVE",
...
"webAccessUris": {
"workerpool0-0": "INTERACTIVE_SHELL_URI"
}
}
],
}
webAccessUris
필드가 표시되지 않으면 Vertex AI에서 작업 실행이 아직 시작되지 않았기 때문일 수 있습니다. state
필드에 JOB_STATE_RUNNING
이 표시되는지 확인합니다. 상태가 JOB_STATE_QUEUED
또는 JOB_STATE_PENDING
이면 1분 동안 기다린 다음 프로젝트 정보를 다시 가져옵니다.
Vertex AI는 시도가 ACTIVE
상태가 되면 각 초매개변수 미세 조정 시도에 대한 대화형 셸 URI 집합을 제공합니다. 나중에 시도에 사용할 대화형 셸 URI를 가져오려면 평가판이 시작된 후 작업 정보를 다시 가져옵니다.
앞의 예시는 단일 복제본 학습에 예상되는 출력(기본 학습 노드에 대한 URI 1개)을 보여줍니다. 분산 학습을 수행하는 경우 출력에는 작업자 풀로 식별되는 각 학습 노드에 대한 URI 1개가 포함됩니다.
예를 들어 작업에 하나의 복제본이 포함된 기본 작업자 풀과 2개의 복제본이 포함된 보조 작업자 풀이 있으면 webAccessUris
필드가 다음과 비슷하게 표시됩니다.
{
"workerpool0-0": "URI_FOR_PRIMARY",
"workerpool1-0": "URI_FOR_FIRST_SECONDARY",
"workerpool1-1": "URI_FOR_SECOND_SECONDARY"
}
대화형 셸 사용
학습 노드에 대화형 셸을 사용하려면 이전 섹션에서 찾은 URI 중 하나로 이동합니다. 브라우저에 Bash 셸이 표시되어 Vertex AI가 학습 코드를 실행 중인 컨테이너의 파일 시스템에 액세스할 수 있습니다.
다음 섹션에서는 셸을 사용할 때 고려해야 할 사항을 설명하고 셸에서 사용할 수 있는 모니터링 도구의 몇 가지 예시를 제공합니다.
작업 종료 방지
Vertex AI에서 작업 또는 시도 실행을 완료하면 대화형 셸에 즉시 액세스할 수 없게 됩니다. 이 경우 command terminated with exit code 137
메시지가 표시되거나 셸이 응답을 중지할 수 있습니다. 컨테이너의 파일 시스템에서 파일을 만든 경우 작업이 종료된 후에는 유지되지 않습니다.
경우에 따라 작업을 대화형 셸로 디버깅하기 위해 작업을 의도적으로 더 오래 실행할 수 있습니다. 예를 들어 다음과 같은 코드를 학습 코드에 추가하여 예외가 발생한 후 최소 1시간 동안 작업이 계속 실행되도록 할 수 있습니다.
import time
import traceback
try:
# Replace with a function that runs your training code
train_model()
except Exception as e:
traceback.print_exc()
time.sleep(60 * 60) # 1 hour
하지만 작업이 계속 실행되는 한 Vertex AI Training 요금이 발생합니다.
권한 문제 확인
대화형 셸 환경은 Vertex AI가 학습 코드를 실행하는 데 사용하는 서비스 계정에 대해 애플리케이션 기본 사용자 인증 정보(ADC)를 사용하여 인증됩니다. 자세한 내용은 셸에서 gcloud auth list
를 실행하여 확인할 수 있습니다.
셸에서 bq
및 ADC를 지원하는 기타 도구를 사용할 수 있습니다. 이를 통해 학습 코드에 필요한 특정 Cloud Storage 버킷, BigQuery 테이블 또는 기타 Google Cloud 리소스에 작업이 액세스할 수 있는지 확인할 수 있습니다.
py-spy
로 Python 실행 시각화
py-spy
를 사용하면 실행 중인 Python 프로그램을 수정하지 않고 프로파일링할 수 있습니다. 대화형 셸에서 py-spy
를 사용하려면 다음을 수행합니다.
py-spy
을 설치합니다.pip3 install py-spy
셸에서
ps aux
를 실행하고 Python 학습 프로그램의 PID를 찾습니다.이전 단계에서 찾은 PID를 사용하여
py-spy
문서에 설명된 하위 명령어를 실행합니다.py-spy record
를 사용하여 SVG 파일을 만드는 경우 나중에 로컬 컴퓨터에서 볼 수 있도록 이 파일을 Cloud Storage 버킷에 복사합니다. 예를 들면 다음과 같습니다.gcloud storage cp profile.svg gs://BUCKET
BUCKET을 액세스할 수 있는 버킷의 이름으로 바꿉니다.
perf
를 사용하여 성능 분석
perf
를 사용하면 학습 노드의 성능을 분석할 수 있습니다.
노드의 Linux 커널에 적합한 perf
버전을 설치하려면 다음 명령어를 실행합니다.
apt-get update
apt-get install -y linux-tools-generic
rm /usr/bin/perf
LINUX_TOOLS_VERSION=$(ls /usr/lib/linux-tools | tail -n 1)
ln -s "/usr/lib/linux-tools/${LINUX_TOOLS_VERSION}/perf" /usr/bin/perf
그런 다음 perf
문서에 설명된 하위 명령어를 실행할 수 있습니다.
GPU 사용량 정보 검색
GPU가 있는 노드에서 실행되는 GPU 지원 컨테이너에는 일반적으로 GPU 사용량을 모니터링하는 데 도움이 되는 여러 명령줄 도구가 사전 설치되어 있습니다. 예를 들면 다음과 같습니다.
nvidia-smi
를 사용하여 다양한 프로세스의 GPU 사용률을 모니터링합니다.nvprof
를 사용하여 다양한 GPU 프로파일링 정보를 수집합니다.nvprof
는 기존 프로세스에 연결할 수 없으므로 이 도구를 사용하여 학습 코드를 실행하는 추가 프로세스를 시작하는 것이 좋습니다. 즉, 학습 코드가 노드에서 두 번 실행됩니다. 예를 들면 다음과 같습니다.nvprof -o prof.nvvp python3 -m MODULE_NAME
MODULE_NAME을 학습 애플리케이션 진입점 모듈의 정규화된 이름으로 바꿉니다(예:
trainer.task
).그런 다음 나중에 로컬 컴퓨터에서 분석할 수 있도록 출력 파일을 Cloud Storage 버킷으로 전송합니다. 예를 들면 다음과 같습니다.
gcloud storage cp prof.nvvp gs://BUCKET
BUCKET을 액세스할 수 있는 버킷의 이름으로 바꿉니다.
구성 또는 Vertex AI 문제가 아닌 GPU 오류가 발생하면
nvidia-bug-report.sh
를 사용하여 버그 신고를 만듭니다.그런 다음 나중에 로컬 컴퓨터에서 분석할 수 있도록 보고서를 Cloud Storage 버킷으로 전송하거나 NVIDIA로 보낼 수 있습니다. 예를 들면 다음과 같습니다.
gcloud storage cp nvidia-bug-report.log.gz gs://BUCKET
BUCKET을 액세스할 수 있는 버킷의 이름으로 바꿉니다.
bash
에서 다음과 같은 NVIDIA 명령어를 찾을 수 없으면 셸의 PATH
에 /usr/local/nvidia/bin
및 /usr/local/cuda/bin
을 추가해 봅니다.
export PATH="/usr/local/nvidia/bin:/usr/local/cuda/bin:${PATH}"
Ray 대시보드 및 VPC-SC + VPC 피어링을 사용한 대화형 셸
-
peered-dns-domains
를 구성합니다.{ VPC_NAME=NETWORK_NAME REGION=LOCATION gcloud services peered-dns-domains create training-cloud \ --network=$VPC_NAME \ --dns-suffix=$REGION.aiplatform-training.cloud.google.com. # Verify gcloud beta services peered-dns-domains list --network $VPC_NAME; }
-
NETWORK_NAME: 피어링된 네트워크로 변경합니다.
-
LOCATION: 원하는 위치입니다(예:
us-central1
).
-
-
DNS managed zone
를 구성합니다.{ PROJECT_ID=PROJECT_ID ZONE_NAME=$PROJECT_ID-aiplatform-training-cloud-google-com DNS_NAME=aiplatform-training.cloud.google.com DESCRIPTION=aiplatform-training.cloud.google.com gcloud dns managed-zones create $ZONE_NAME \ --visibility=private \ --networks=https://www.googleapis.com/compute/v1/projects/$PROJECT_ID/global/networks/$VPC_NAME \ --dns-name=$DNS_NAME \ --description="Training $DESCRIPTION" }
-
PROJECT_ID: 프로젝트 ID입니다. 이러한 ID는 Google Cloud Console 시작 페이지에서 찾을 수 있습니다.
-
-
DNS 트랜잭션을 기록합니다.
{ gcloud dns record-sets transaction start --zone=$ZONE_NAME gcloud dns record-sets transaction add \ --name=$DNS_NAME. \ --type=A 199.36.153.4 199.36.153.5 199.36.153.6 199.36.153.7 \ --zone=$ZONE_NAME \ --ttl=300 gcloud dns record-sets transaction add \ --name=*.$DNS_NAME. \ --type=CNAME $DNS_NAME. \ --zone=$ZONE_NAME \ --ttl=300 gcloud dns record-sets transaction execute --zone=$ZONE_NAME }
-
대화형 셸 + VPC-SC + VPC 피어링을 사용 설정한 학습 작업을 제출합니다.
다음 단계
- 프로파일러를 사용하여 커스텀 학습 작업의 성능을 최적화하는 방법 알아보기
- Vertex AI가 커스텀 학습을 조정하는 방법에 대해 자세히 알아보기
- 학습 코드 요구사항 읽어보기