Giới thiệu Deep Learning Containers: Môi trường ổn định và portable

Chúng ta thường rất dễ estimate nhầm thời gian cần thiết để thực hiện một dự án học máy từ khi bắt đầu tới lúc chạy nó. Các dự án yêu cầu chúng ta phải quản lý tính tương thích và độ phức tạp của ngăn xếp phần mềm (software stack) đang phát triển, có thể gây bực bội, tốn thời gian và loại chúng ta ra khỏi những gì chúng ta thực sự muốn làm: dành thời gian tinh chỉnh mô hình (model) theo lịch trình. Để giúp bạn bỏ qua việc thiết lập này và nhanh chóng bắt đầu với dự án của bạn, chúng tôi xin giới thiệu Deep Learning Containers ở phiên bản beta.

Deep Learning Container được đóng gói sẵn, tối ưu hóa hiệu suất và được kiểm tra khả năng tương thích, do đó bạn có thể bắt đầu ngay lập tức. Việc tạo quy trình công việc (workflow) của bạn không chỉ yêu cầu phát triển mã hoặc tạo tác bạn muốn triển khai mà còn duy trì môi trường thực thi nhất quán để đảm bảo độ tái lập và tính chính xác. Nếu chiến lược phát triển của bạn liên quan đến sự kết hợp giữa tạo mẫu cục bộ (local prototyping)và nhiều công cụ đám mây, thường có thể gây khó chịu để đảm bảo rằng tất cả các phụ thuộc cần thiết được đóng gói chính xác và có sẵn cho mọi môi trường. Deep Learning Container giải quyết thách thức này bằng cách cung cấp một môi trường nhất quán để thử nghiệm và triển khai ứng dụng của bạn trên các sản phẩm và dịch vụ GCP, như Cloud AI Platform Notebooks và Google Kubernetes Engine (GKE), giúp dễ dàng mở rộng quy mô cloud hoặc chuyển đổi on-prem. Ngoài ra, chúng tôi cung cấp các phiên bản được tối ưu hóa phần cứng của TensorFlow, cho dù bạn đang đào tạo (training) trên GPU NVIDIA hay triển khai trên CPU Intel.

Trong bài này, chúng tôi sẽ đề cập đến một số tình huống phổ biến khi làm việc với Deep Learning Container, bao gồm cách chọn container, phát triển trên local và tạo các container tùy chỉnh để sử dụng trong Cloud AI Platform Notebooks.

Cách chọn container và phát triển ở local

Tất cả các Deep Learning Containers đều có môi trường Jupyter được cấu hình sẵn, vì vậy mỗi cái có thể được pull về và sử dụng trực tiếp. Trước tiên, hãy đảm bảo bạn đã cài đặt và cấu hình công cụ gcloud. Sau đó, xác định container mà bạn muốn sử dụng.Tất cả các containers được lưu trữ dưới gcr.io/deeplearning-pl platform-release và có thể được liệt kê bằng lệnh:

gcloud container images list --repository="gcr.io/deeplearning-platform-release"

Mỗi container cung cấp môi trường Python3 phù hợp với Deep Learning VM tương ứng, bao gồm framework đã chọn, conda, ngăn xếp NVIDIA cho GPU images (CUDA, cuDNN, NCCL) và một loạt các gói và công cụ hỗ trợ khác. Bản phát hành ban đầu bao gồm các containers cho TensorFlow 1.13, TensorFlow 2.0, PyTorch và R và Google đang nỗ lực để đạt được sự tương đương với tất cả các loại VM Deep Learning.

Ngoại trừ các container cơ sở, tên container sẽ ở định dạng <framework>-<cpu/gpu>.<framework version>. Lệnh sau sẽ khởi động container TensorFlow Deep Learning ở chế độ tách rời, liên kết máy chủ Jupyter đang chạy với cổng 8080 trên máy cục bộ và gắn kết /path/to/local/dir đến /home trong container.

docker run -d -p 8080:8080 -v /path/to/local/dir:/home \

gcr.io/deeplearning-platform-release/tf-cpu.1-13

Sau đó, phiên bản JupyterLab đang chạy có thể được truy cập tại localhost: 8080. Hãy thao tác trong trong / home, vì mọi tệp khác sẽ bị xóa khi dừng container. Nếu bạn muốn sử dụng containers hỗ trợ GPU, bạn sẽ cần GPU tương thích CUDA 10, trình điều khiển được liên kết và nvidia-docker đã được cài đặt. Sau đó, bạn có thể chạy một lệnh giống như:

docker run --runtime=nvidia -d -p 8080:8080 -v /path/to/local/dir:/home \

gcr.io/deeplearning-platform-release/tf-gpu.1-13

Tạo các containers tùy chỉnh và triển khai lên Cloud AI Platform Notebook và GKE

Trong vài trường hợp, bạn có thể cần một máy mạnh hơn so với những gì máy local của bạn cung cấp, nhưng bạn có thể có các gói và dữ liệu local cần được cài đặt trong môi trường. Deep Learning Container có thể được mở rộng để bao gồm các local file và sau đó các thùng chứa tùy chỉnh này sau đó có thể được triển khai trong phiên bản Cloud AI Platform Notebook và GKE.

Ví dụ, hãy tưởng tượng rằng bạn có một gói python cục bộ được gọi là mypackage mà bạn đang sử dụng như một phần của quy trình làm việc Pytorch của bạn. Tạo một Dockerfile trong thư mục chứa mypackage như sau.

Dockerfile

FROM gcr.io/deeplearning-platform-release/pytorch-gpu

COPY mypackage /mypackage

RUN pip install /mypackage

Dockerfile đơn giản này sẽ sao chép trong các tệp gói và cài đặt nó vào môi trường mặc định. Bạn có thể thêm các lệnh RUN pip / conda bổ sung, nhưng bạn không nên sửa đổi CMD hoặc ENTRYPOINT, vì chúng đã được cấu hình cho AI Platform Notebooks. Build và tải lên container này lên Google Container Registry.

export PROJECT_ID=$(gcloud config list project --format "value(core.project)")

export IMAGE_REPO_NAME=pytorch_custom_container

export IMAGE_TAG=$(date +%Y%m%d_%H%M%S)

export IMAGE_URI=gcr.io/$PROJECT_ID/$IMAGE_REPO_NAME:$IMAGE_TAG

docker build -f Dockerfile -t $IMAGE_URI ./

gcloud auth configure-docker

docker push $IMAGE_URI

Sau đó, tạo một instance AI Platform Notebooks bằng cách sử dụng gcloud CLI (sắp có hỗ trợ giao diện người dùng container tùy chỉnh). Hãy sửa đổi loại instance và fields tăng tốc cho phù hợp với nhu cầu khối lượng công việc của bạn.

export IMAGE_FAMILY="common-container"

export ZONE="us-central1-b"

export INSTANCE_NAME="custom-container-notebook"

export INSTANCE_TYPE="n1-standard-8"

export ACCELERATOR="type=nvidia-tesla-t4,count=2"


gcloud compute instances create $INSTANCE_NAME \

--zone=$ZONE \

--image-family=$IMAGE_FAMILY \

--image-project="deeplearning-platform-release" \

--maintenance-policy=TERMINATE \

--accelerator=$ACCELERATOR \

--machine-type=$INSTANCE_TYPE \

--boot-disk-size=100GB \

--scopes=https://www.googleapis.com/auth/cloud-platform \

--metadata="install-nvidia-driver=True,proxy-mode=project_editors,container=$IMAGE_URI"

Sẽ mất một vài phút để thiết lập image. Nếu container được tải chính xác, sẽ có một liên kết để truy cập JupyterLab được ghi vào trường metadata url-proxy và instance sẽ sẵn sàng trong AI Platform > Notebooks UI trên Cloud Console. Bạn cũng có thể truy vấn liên kết trực tiếp bằng cách mô tả instance metadata.

gcloud compute instances describe "${INSTANCE_NAME}" \

--format='value[](metadata.items.proxy-url)'

Truy cập liên kết này sẽ đưa bạn đến instance JupyterLab.

Xin lưu ý: chỉ dữ liệu ở /home sẽ được duy trì trong suốt quá trình khởi động lại. Theo mặc định, VM container gắn /home trên VM đến / home trên container, vì vậy hãy đảm bảo bạn tạo notebooks mới trong /home, nếu không công việc đó sẽ bị mất khi instance shutdown.

Triển khai Deep Learning Containers trên GKE với các NVIDIA GPU

Bạn cũng có thể tận dụng GKE để phát triển trên Deep Learning Container. Sau khi thiết lập cụm GKE của bạn với GPU theo hướng dẫn, bạn chỉ cần chỉ định container image trong thông số pod Kubernetes của mình. Thông số kỹ thuật sau đây tạo một nhóm với một GPU từ tf-gpu và gắn persistent disk GCE:

pod.yaml

apiVersion: v1

kind: PersistentVolumeClaim

metadata:

name: dlc-persistent-volume-claim

spec:

accessModes:

- ReadWriteOnce

resources:

requests:

storage: 100Gi

---

apiVersion: v1

kind: Pod

metadata:

name: dlc-tf

spec:

containers:

- name: dlc-tf

image: gcr.io/deeplearning-platform-release/tf-gpu

resources:

limits:

nvidia.com/gpu: 1

volumeMounts:

- name: dlc-volume

mountPath: /home

volumes:

- name: dlc-volume

persistentVolumeClaim:

claimName: dlc-persistent-volume-claim

Triển khai và kết nối với instance bằng các lệnh sau:

kubectl apply -f ./pod.yaml

kubectl port-forward pods/dlc-tf 8080:8080

Sau khi pod được triển khai đầy đủ, JupyterLab instance đang chạy có thể được truy cập tại:

localhost:8080.

Hãy cùng bắt đầu sử dụng chúng.

Nếu bạn chưa là khách hàng của Google Cloud, bạn có thể đăng ký ngay hôm nay để nhận 300 USD để dùng các sản phẩm của GCP. Sau đó, hãy đọc thêm hướng dẫn và tài liệu để hiểu biết thêm chi tiết về việc bắt đầu với các dự án của bạn.

Nguồn: Google Cloud Blog