在 AWS Elastic Beanstalk 上的 Docker 容器中运行 GPU 加速应用程序

Pio*_*zyn 6 gpu machine-learning docker amazon-elastic-beanstalk

我只是想与社区分享我如何设法在 AWS Elastic Beanstalk 上的 Docker 容器中运行 GPU 加速应用程序。我花了将近两天的时间反复试验,所以我希望其他人不要浪费时间在这里发表这篇文章。

这些是我的 Elastic Beanstalk 环境的设置:

  1. 将 AMI ID 设置为 NVIDIA 驱动程序和 Docker 预配置的 ID。我使用了深度学习 AMI (Amazon Linux) 版本 25.3 -ami-068d6d02d8775ec52
  2. 将实例类型设置为具有 GPU 的 EC2 实例之一。我使用g3s.xlarge它,因为它足以满足我需要做的事情。
  3. 在您的应用中Dockerfile添加以下几行:
ENV NVIDIA_VISIBLE_DEVICES all
ENV NVIDIA_DRIVER_CAPABILITIES compute,utility
Run Code Online (Sandbox Code Playgroud)
  1. 在您的应用程序根文件夹中创建.ebextensions/01-nvidia-docker.config文件并粘贴以下代码:
option_settings:
  aws:autoscaling:launchconfiguration:
    # I had to increase storage space for the docker to run my container
    BlockDeviceMappings: /dev/xvdcz=:24:true

commands:
  configure_docker_run:
    # I had to update EB startup script so it passes `--runtime=nvidia` when running docker
    command: sed -i 's/docker run -d/docker run --runtime=nvidia -d/' /opt/elasticbeanstalk/hooks/appdeploy/enact/00run.sh
    # Following line will be required if docker is updated to 19.1
    # command: sed -i 's/docker run --gpus all -d/docker run -d/' /opt/elasticbeanstalk/hooks/appdeploy/enact/00run.sh
Run Code Online (Sandbox Code Playgroud)

瞧,您可以在启用 NVIDIA GPU 的情况下享受在 Elastic Beanstalk 上运行的 Docker 容器。

小智 2

将深度学习 AMI 与 Beanstalk 结合使用可能无法使用某些 Beanstalk 功能,例如运行状况监控、带有工作环境的 sqsd。就我而言,我从 Beanstalk docker AMI 构建了一个自定义 AMI,并使用启用了 GPU 的 docker-compose 部署了应用程序。详情如下:

  1. 检查 Beanstalk 默认配置中的 Beanstalk docker AMI
  2. 使用 Beanstalk docker AMI 在 GPU 实例类型(例如:g4dn.xlarge)上启动 EC2 实例
  3. 安装 Nvidia 驱动程序(需要 S3 访问权限)https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/install-nvidia-driver.html
sudo yum install -y gcc kernel-devel-$(uname -r)
aws s3 cp --recursive s3://nvidia-gaming/linux/latest/ .
chmod +x NVIDIA-Linux-x86_64*.run
sudo ./NVIDIA-Linux-x86_64*.run
nvidia-smi
Run Code Online (Sandbox Code Playgroud)
  1. 安装 NVIDIA Container Toolkit(请勿安装 DOCKER - docker 将由 Beanstalk 安装)https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html#installing-on-amazon-linux
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
   && curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.repo | sudo tee /etc/yum.repos.d/nvidia-docker.repo
sudo yum clean expire-cache
sudo yum install nvidia-docker2
Run Code Online (Sandbox Code Playgroud)
  1. 停止实例并从该实例创建 AMI
  2. 将您的 AMI ID 设置为 Beanstalk 配置
  3. 使用 docker-compose.yaml 部署 docker 容器(https://docs.docker.com/compose/gpu-support/
services:
  test:
    image: nvidia/cuda:10.2-base
    command: nvidia-smi
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu]
Run Code Online (Sandbox Code Playgroud)

注意:对于 beanstalk 工作人员 ( https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_docker.container.console.html )

如果您使用 Docker Compose 管理 Docker 环境,Elastic Beanstalk 会假定您将代理服务器作为容器运行。因此,代理服务器设置默认为 None,并且 Elastic Beanstalk 不提供 NGINX 配置