Amazon Web Services 한국 블로그

AWS 딥 러닝 컨테이너 서비스 출시 – 기계 학습 모델 학습용 최적화 이미지 제공

AWS는 일반 개발자들도 딥 러닝을 쉽게 배우고, 이를 통해 인공 지능 기반 애플리케이션 및 서비스를 만들 수 있는 다양한 서비스제공하고 있습니다. 대용량 데이터 세트를 수집하고, 딥러닝을 통해 기존 모델을 학습하거나, 새 모델을 구축하고 추론을 수행하는 방법을 알면 모든 준비가 완료된 것입니다. AWS 클라우드에서 더 빠르고 쉽게 학습 과정을 구축할 수 있기 때문입니다.

Deep Learning Container 서비스

신규 AWS 딥 러닝 컨테이너을 소개합니다. 여기서 제공하는 Docker 이미지는 TensorFlow 또는 Apache MXNet과 기타 오픈 소스 프레임워크를 사용한 딥 러닝 학습 또는 추론에 바로 사용할 수 있습니다. 저희는 Amazon EKSECS를 사용하여 TensorFlow 워크로드를 클라우드에 배포하는 고객으로부터 작업을 가능한 단순하고 쉽게 만들어 달라는 요청을 지속적으로 받았습니다. 이러한 피드백을 기반으로, 컨테이너를 통해 딥러닝 학습 시간을 줄이고 추론 성능을 강화하는 것을 목표로 AWS에서 사용하기에 적합하도록 이미지를 최적화했습니다.

사전 구성 및 검증을 마친 이미지가 제공되므로 이제 고객은 Amazon ECS, Amazon Elastic Container Service for KubernetesAmazon Elastic Compute Cloud(EC2)에서 몇 분 안에 사용자 지정 환경 및 워크플로를 설정하여 딥 러닝 작업에 집중할 수 있습니다. AWS MarketplaceElastic Container Registry에서 이미지를 찾고 무료로 사용할 수 있습니다. 이러한 이미지를 있는 그대로 사용하거나 추가 라이브러리 또는 패키지로 사용자 지정할 수 있습니다.

다음과 같은 요소를 기반으로 이름이 지정된 다수의 딥 러닝 컨테이너가 제공됩니다. 일부 조합은 사용하지 못할 수 있습니다.

  • 프레임워크 – TensorFlow 또는 MXNet.
  • 모드 – 학습 또는 추론. 단일 노드 또는 다중 노드 클러스터에서 학습을 수행할 수 있습니다.
  • 환경 – CPU 또는 GPU.
  • Python 버전 – 2.7 또는 3.6.
  • 분산 학습Horovod 프레임워크의 가용성.
  • 운영 체제 – Ubuntu 16.04.

딥 러닝 컨테이너 사용하기

AWS 딥 러닝 컨테이너를 사용하기 위해 p2.8xlarge 인스턴스로 Amazon ECS 클러스터를 생성합니다.

$ aws ec2 run-instances --image-id  ami-0ebf2c738e66321e6 \
  --count 1 --instance-type p2.8xlarge \
  --key-name keys-jbarr-us-east ... 

클러스터가 실행되는지 확인하고 ECS 컨테이너 에이전트가 활성 상태인지 확인합니다.

그런 다음 텍스트 파일(gpu_task_def.txt)로 작업 정의를 생성합니다.

{
  "requiresCompatibilities": [
    "EC2"
  ],
  "containerDefinitions": [
    {
      "command": [
        "tensorflow_model_server --port=8500 --rest_api_port=8501 --model_name=saved_model_half_plus_two_gpu  --model_base_path=/models/saved_model_half_plus_two_gpu"
      ],
      "entryPoint": [
        "sh",
        "-c"
      ],
      "name": "EC2TFInference",
      "image": "841569659894.dkr.ecr.us-east-1.amazonaws.com/sample_tf_inference_images:gpu_with_half_plus_two_model",
      "memory": 8111,
      "cpu": 256,
      "resourceRequirements": [
        {
          "type": "GPU",
          "value": "1"
        }
      ],
      "essential": true,
      "portMappings": [
        {
          "hostPort": 8500,
          "protocol": "tcp",
          "containerPort": 8500
        },
        {
          "hostPort": 8501,
          "protocol": "tcp",
          "containerPort": 8501
        },
        {
          "containerPort": 80,
          "protocol": "tcp"
        }
      ],
      "logConfiguration": {
        "logDriver": "awslogs",
        "options": {
          "awslogs-group": "/ecs/TFInference",
          "awslogs-region": "us-east-1",
          "awslogs-stream-prefix": "ecs"
        }
      }
    }
  ],
  "volumes": [],
  "networkMode": "bridge",
  "placementConstraints": [],
  "family": "Ec2TFInference"
}

작업 정의를 등록하고 개정 번호(3)를 캡처합니다.

다음으로 작업 정의 및 개정 번호를 사용하여 서비스를 생성합니다.

콘솔을 사용하여 작업으로 이동합니다.

포트 8501에 대한 외부 바인딩을 찾습니다.

세 가지 추론을 실행합니다. 이 특정 모델y = ax + b 함수로 학습되었으며 여기서 a = 0.5이고 b = 2입니다.

$ curl -d '{"instances": [1.0, 2.0, 5.0]}' \
  -X POST http://xx.xxx.xx.xx:8501/v1/models/saved_model_half_plus_two_gpu:predict
{
    "predictions": [2.5, 3.0, 4.5
    ]
}

보시다시피 추론은 지정된 입력이 1.0, 2.0 및 5.0일 때 값 2.5, 3.0 및 4.5를 예측했습니다. ECS에서 새로운 딥 러닝 컨테이너를 통해 사전 학습된 모델을 사용하는 방법을 보여주는 아주 단순한 예제입니다. 학습용으로 모델을 시작하고 학습을 수행한 후 일부 추론을 실행할 수도 있습니다.

Jeff;