Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Receta para traer tu propio contenedor
En esta sección, te ofrecemos una step-by-step guía con todo lo que necesitas bring your own container (BYOC) para utilizar Hybrid Jobs: los scripts, los archivos y los pasos para combinarlos y empezar a trabajar con tus Docker imágenes personalizadas. Proporcionamos recetas para dos casos comunes:
-
Instale software adicional en una Docker imagen y utilice únicamente scripts de algoritmos de Python en sus trabajos.
-
Utilice scripts de algoritmos escritos en un lenguaje que no sea Python con Hybrid Jobs o una arquitectura de CPU distinta de x86.
Definir el script de entrada del contenedor es más complejo en el caso 2.
Cuando Braket ejecuta tu Hybrid Job, lanza el número y el tipo de EC2 instancias de Amazon solicitados y, a continuación, ejecuta la Docker imagen especificada por el URI de la imagen para crear el trabajo en ellas. Al utilizar la función BYOC, debe especificar un URI de imagen alojado en un repositorio privado de Amazon ECR al que tiene acceso de lectura. Braket Hybrid Jobs utiliza esa imagen personalizada para ejecutar el trabajo.
Los componentes específicos que necesita para crear una Docker imagen que pueda usarse con Hybrid Jobs. Si no está familiarizado con la escritura y la creaciónDockerfiles
, le sugerimos que consulte la documentación de Dockerfile
Aquí tienes un resumen de lo que necesitarás:
Una imagen base para tu Dockerfile
Si utilizas Python y quieres instalar software sobre lo que se proporciona en los contenedores proporcionados por Braket, una opción para una imagen base es una de las imágenes del contenedor de Braket, alojada en nuestro GitHub repositorioFROM [IMAGE_URI_HERE]
A continuación, rellene el resto Dockerfile para instalar y configurar el software que desea añadir al contenedor. Las imágenes prediseñadas de Braket ya contienen el script de punto de entrada al contenedor adecuado, así que no tienes que preocuparte por incluirlo.
Si quieres usar un lenguaje que no sea Python, como C++, Rust o Julia, o si deseas crear una imagen para una arquitectura de CPU que no sea x86, como ARM, es posible que tengas que compilarla sobre una imagen pública básica. Puede encontrar muchas de estas imágenes en la galería pública de Amazon Elastic Container Registry
(Opcional) Un script de punto de entrada al contenedor modificado
nota
Si solo vas a añadir software adicional a una imagen de Braket prediseñada, puedes saltarte esta sección.
Para ejecutar código que no sea de Python como parte de su trabajo híbrido, tendrá que modificar el script de Python que define el punto de entrada del contenedor. Por ejemplo, el script de braket_container.py
Python en Amazon Braketthekick_off_customer_script()
También puede optar por escribir una completamente nuevabraket_container.py
. Debe copiar los datos de entrada, los archivos fuente y otros archivos necesarios de Amazon S3 al contenedor y definir las variables de entorno adecuadas.
Instale el software y el script de contenedor necesarios con Dockerfile
nota
Si utiliza una imagen Braket prediseñada como imagen Docker base, el script del contenedor ya está presente.
Si creó un script de contenedor modificado en el paso anterior, tendrá que copiarlo en el contenedor y definir la variable de entorno o el nombre SAGEMAKER_PROGRAM
con braket_container.py
el que ha denominado el nuevo script de punto de entrada del contenedor.
El siguiente es un ejemplo de un ejemplo Dockerfile
que te permite usar Julia en instancias de Jobs aceleradas por la GPU:
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
En este ejemplo, se descargan y ejecutan los scripts proporcionados por AWS para garantizar el cumplimiento de todas las licencias de código abierto pertinentes. Por ejemplo, atribuyendo correctamente cualquier código instalado regido por una. MIT license
Si necesitas incluir código no público, por ejemplo, código alojado en un repositorio privado GitHub o en un GitLab repositorio, no insertes claves SSH en la Docker imagen para acceder a él. En su lugar, Docker Compose utilízalas al compilar para permitir Docker el acceso a SSH en la máquina host en la que está integrado. Para obtener más información, consulta la guía Cómo usar claves SSH de forma segura en Docker para acceder a los repositorios privados de Github
Cómo crear y cargar una imagen Docker
Una vez definido correctamenteDockerfile
, ya puede seguir los pasos para crear un repositorio privado de Amazon ECR, si aún no existe uno. También puede crear, etiquetar y cargar la imagen de su contenedor en el repositorio.
Estás listo para crear, etiquetar e insertar la imagen. Consulta la documentación de compilación de Dockerdocker build
y algunos ejemplos.
Para el archivo de muestra definido anteriormente, puedes ejecutar:
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
Asignación de los permisos de Amazon ECR adecuados
Braket Hybrid Jobs Dockerlas imágenes deben estar alojadas en repositorios privados de Amazon ECR. De forma predeterminada, un repositorio privado de Amazon ECR no proporciona acceso de lectura Braket Hybrid Jobs IAM role ni a ningún otro usuario que quiera usar su imagen, como un colaborador o un estudiante. Debe establecer una política de repositorio para conceder los permisos adecuados. Por lo general, solo debes dar permiso a los usuarios y IAM roles específicos a los que desees acceder a tus imágenes, en lugar de permitir que cualquier persona que tenga los permisos image URI los extraiga.