기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
자체 컨테이너를 가져오는 레시피
이 섹션에서는 필요한 사항에 대한 가이드를 제공합니다 step-by-step.bring your own container (BYOC) - Braket Hybrid Jobs - 사용자 지정을 시작하고 실행하기 위해 스크립트, 파일 및 이를 결합하는 단계 Docker 이미지. 두 가지 일반적인 사례에 대한 레시피를 제공합니다.
-
에 추가 소프트웨어 설치 Docker 작업에 Python 알고리즘 스크립트만 이미지화하고 사용합니다.
-
Hybrid Jobs 또는 x86 이외의 CPU 아키텍처에서 비 Python 언어로 작성된 알고리즘 스크립트를 사용합니다.
컨테이너 항목 스크립트를 정의하는 것은 사례 2에서 더 복잡합니다.
Braket이 하이브리드 작업을 실행하면 요청된 수와 유형의 Amazon EC2 인스턴스를 시작한 다음를 실행합니다.Docker 이미지에서 작업 생성에 대한 이미지 URI 입력으로 지정된 이미지입니다. BYOC 기능을 사용할 때 읽기 액세스 권한이 있는 프라이빗 Amazon ECR리포지토리에서 URI 호스팅되는 이미지를 지정합니다. Braket Hybrid Jobs는 해당 사용자 지정 이미지를 사용하여 작업을 실행합니다.
빌드에 필요한 특정 구성 요소 Docker 하이브리드 작업과 함께 사용할 수 있는 이미지입니다. 작성 및 빌드에 익숙하지 않은 경우 Dockerfile 설명서Dockerfiles
것이 좋습니다. Amazon ECR CLI 이 지침을 읽는 동안 필요에 따라 문서를 작성합니다.
다음은 필요한 사항에 대한 개요입니다.
Dockerfile의 기본 이미지
Python을 사용하고 있고 Braket 제공 컨테이너에 제공된 것 외에도 소프트웨어를 설치하려는 경우 기본 이미지에 대한 옵션은 GitHub 리포FROM [IMAGE_URI_HERE]
그런 다음 나머지를 입력합니다.Dockerfile 컨테이너에 추가할 소프트웨어를 설치하고 설정합니다. 사전 구축된 Braket 이미지에는 이미 적절한 컨테이너 진입점 스크립트가 포함되어 있으므로 이를 포함할 필요가 없습니다.
C++, Rust 또는 Julia와 같은 비 Python 언어를 사용하려는 경우 또는와 같은 비x86 CPU 아키텍처에 대한 이미지를 빌드하려는 ARM경우 바레본 퍼블릭 이미지 위에를 빌드해야 할 수 있습니다. Amazon Elastic Container Registry Public Gallery
(선택 사항) 수정된 컨테이너 진입점 스크립트
참고
사전 구축된 Braket 이미지에 추가 소프트웨어만 추가하는 경우이 섹션을 건너뛸 수 있습니다.
하이브리드 작업의 일부로 비 Python 코드를 실행하려면 컨테이너 진입점을 정의하는 Python 스크립트를 수정해야 합니다. 예를 들어 braket_container.py
Amazon Braket Github의 python 스크립트입니다thekick_off_customer_script()
완전히 새로운를 작성하도록 선택할 수도 있습니다braket_container.py
. Amazon S3에서 컨테이너로 입력 데이터, 소스 아카이브 및 기타 필요한 파일을 복사하고 적절한 환경 변수를 정의해야 합니다.
를 사용하여 필요한 소프트웨어 및 컨테이너 스크립트 설치 Dockerfile
참고
사전 구축된 Braket 이미지를 로 사용하는 경우 Docker 기본 이미지, 컨테이너 스크립트가 이미 있습니다.
이전 단계에서 수정된 컨테이너 스크립트를 생성한 경우 컨테이너에 복사하고 환경 변수를 SAGEMAKER_PROGRAM
로 정의braket_container.py
하거나 새 컨테이너 진입점 스크립트의 이름을 지정해야 합니다.
다음은 GPU가속화된 작업 인스턴스에서 줄리아를 사용할 수 Dockerfile
있는의 예입니다.
FROM nvidia/cuda:12.2.0-devel-ubuntu22.04 ARG DEBIAN_FRONTEND=noninteractive ARG JULIA_RELEASE=1.8 ARG JULIA_VERSION=1.8.3 ARG PYTHON=python3.11 ARG PYTHON_PIP=python3-pip ARG PIP=pip ARG JULIA_URL = https://julialang-s3.julialang.org/bin/linux/x64/${JULIA_RELEASE}/ ARG TAR_NAME = julia-${JULIA_VERSION}-linux-x86_64.tar.gz ARG PYTHON_PKGS = # list your Python packages and versions here RUN curl -s -L ${JULIA_URL}/${TAR_NAME} | tar -C /usr/local -x -z --strip-components=1 -f - RUN apt-get update \ && apt-get install -y --no-install-recommends \ build-essential \ tzdata \ openssh-client \ openssh-server \ ca-certificates \ curl \ git \ libtemplate-perl \ libssl1.1 \ openssl \ unzip \ wget \ zlib1g-dev \ ${PYTHON_PIP} \ ${PYTHON}-dev \ RUN ${PIP} install --no-cache --upgrade ${PYTHON_PKGS} RUN ${PIP} install --no-cache --upgrade sagemaker-training==4.1.3 # Add EFA and SMDDP to LD library path ENV LD_LIBRARY_PATH="/opt/conda/lib/python${PYTHON_SHORT_VERSION}/site-packages/smdistributed/dataparallel/lib:$LD_LIBRARY_PATH" ENV LD_LIBRARY_PATH=/opt/amazon/efa/lib/:$LD_LIBRARY_PATH # Julia specific installation instructions COPY Project.toml /usr/local/share/julia/environments/v${JULIA_RELEASE}/ RUN JULIA_DEPOT_PATH=/usr/local/share/julia \ julia -e 'using Pkg; Pkg.instantiate(); Pkg.API.precompile()' # generate the device runtime library for all known and supported devices RUN JULIA_DEPOT_PATH=/usr/local/share/julia \ julia -e 'using CUDA; CUDA.precompile_runtime()' # Open source compliance scripts RUN HOME_DIR=/root \ && curl -o ${HOME_DIR}/oss_compliance.zip https://aws-dlinfra-utilities.s3.amazonaws.com/oss_compliance.zip \ && unzip ${HOME_DIR}/oss_compliance.zip -d ${HOME_DIR}/ \ && cp ${HOME_DIR}/oss_compliance/test/testOSSCompliance /usr/local/bin/testOSSCompliance \ && chmod +x /usr/local/bin/testOSSCompliance \ && chmod +x ${HOME_DIR}/oss_compliance/generate_oss_compliance.sh \ && ${HOME_DIR}/oss_compliance/generate_oss_compliance.sh ${HOME_DIR} ${PYTHON} \ && rm -rf ${HOME_DIR}/oss_compliance* # Copying the container entry point script COPY braket_container.py /opt/ml/code/braket_container.py ENV SAGEMAKER_PROGRAM braket_container.py
이 예제에서는에서 제공하는 스크립트를 다운로드하고 실행 AWS 하여 모든 관련 오픈 소스 라이선스를 준수하는지 확인합니다. 예를 들어,에서 관리하는 설치된 코드를 적절하게 어트리뷰션하여 MIT license.
비공개 코드를 포함해야 하는 경우, 예를 들어 프라이빗 GitHub 또는 GitLab 리포지토리에서 호스팅되는 인스턴스 코드는에 SSH 키를 포함시키지 마십시오.Docker 액세스할 이미지입니다. 대신를 사용합니다.Docker Compose 를 허용하도록 빌드할 때 Docker 를 기반으로 하는 호스트 시스템에서 SSH에 액세스합니다. 자세한 내용은 Docker의 SSH 키를 사용하여 프라이빗 Github 리포지토리에 액세스하기 위한 보안
빌드 및 업로드 Docker 이미지
이제가 제대로 정의Dockerfile
되어 있으면 프라이빗 Amazon 리포지토리가 아직 없는 경우 해당 단계에 따라 프라이빗 Amazon ECR리포지토리를 생성할 준비가 된 것입니다. 컨테이너 이미지를 빌드하고 태그를 지정하여 리포지토리에 업로드할 수도 있습니다.
이미지를 빌드, 태그 지정 및 푸시할 준비가 되었습니다. docker build
및 몇 가지 예제에 대한 옵션에 대한 전체 설명은 Docker 빌드 설명서를
위에 정의된 샘플 파일의 경우 다음을 실행할 수 있습니다.
aws ecr get-login-password --region ${your_region} | docker login --username AWS --password-stdin ${aws_account_id}.dkr.ecr.${your_region}.amazonaws.com docker build -t braket-julia . docker tag braket-julia:latest ${aws_account_id}.dkr.ecr.${your_region}.amazonaws.com/braket-julia:latest docker push ${aws_account_id}.dkr.ecr.${your_region}.amazonaws.com/braket-julia:latest
적절한 Amazon ECR 권한 할당
Braket Hybrid Jobs Docker 이미지는 프라이빗 Amazon ECR리포지토리에서 호스팅되어야 합니다. 기본적으로 프라이빗 Amazon ECR리포지토리는에 대한 읽기 액세스를 제공하지 않습니다. Braket Hybrid Jobs IAM role 또는 공동 작업자 또는 학생과 같이 이미지를 사용하려는 다른 사용자에게. 적절한 권한을 부여하려면 리포지토리 정책을 설정해야 합니다. 일반적으로는 특정 사용자에게만 권한을 부여하고 IAM 를 사용하는 사용자를 허용하는 대신 이미지에 액세스하려는 역할 image URI 를 사용하여 가져옵니다.