Chạy khối lượng công việc ML/DL bằng Red Hat OpenShift Container Platform v3.11 (2)

Đào tạo TensorFlow tăng tốc GPU bằng TFJobs

Giới thiệu

Đào tạo mô hình là phần tính toán chuyên sâu nhất của ML/DL. Kubeflow sử dụng TFJobs , một tài nguyên tùy chỉnh của Kubernetes,  để chạy các công việc đào tạo TensorFlow theo cách tự động và cho phép các nhà khoa học dữ liệu theo dõi tiến độ công việc  bằng cách xem kết quả . GPU Nvidia được sử dụng để tăng tốc đào tạo mô hình mạng thần kinh và đào tạo.

Thời gian thực hiện cũng có thể giảm bằng cách chạy đào tạo phân tán TensorFlow ,  tận  dụng  khả năng tính toán của nhiều GPU để hoạt động trên cùng một đào tạo mạng thần kinh. Nhiều thành phần đóng vai trò cho phép đào tạo phân tán :  các nút công nhân ,  nơi  diễn ra quá trình tính toán (đào tạo mô hình) và  Máy chủ tham số (PS) ,  chịu trách nhiệm lưu trữ các tham số cần thiết cho từng công nhân.

Kubeflow cung cấp một đại diện YAML cho TFJobs.

Ví dụ đào tạo mẫu

Để thể hiện các khả năng của nền tảng Kubeflow trong việc thực hiện các công việc đào tạo ML/DL cũng như hiệu quả mở rộng quy mô của Nền tảng bộ chứa OpenShift , chúng tôi đã chạy tiêu chuẩn TensorFlow CNN để đào tạo mô hình Res n et50 , như thể hiện trong hình sau:

Ảnh chụp màn hình điện thoại di động Mô tả được tạo với độ tin cậy rất cao

Hình 3. Ví dụ đào tạo: Mô hình Resnet50

Chúng tôi đã chạy điểm chuẩn TensorFlow CNN bằng cách sử dụng TFJobs , một giao diện Kubeflow để thực hiện đào tạo TENSORFLOW và theo dõi quá trình đào tạo. Hình 3 cho thấy hiệu suất của các công việc đào tạo bằng cách sử dụng chỉ số thông lượng (hình ảnh/giây). Kết quả hiệu suất cho điểm chuẩn ResNet-50 được vẽ cho cả GPU NVIDIA Tesla V100 và T4. Đúng như dự đoán, việc sử dụng nhiều GPU hơn để đào tạo mô hình sẽ mang lại hiệu suất cao hơn. Chúng tôi đã sử dụng thư viện Horovod do Uber phát triển để mở rộng quy mô công việc đào tạo nhằm thực hiện đào tạo phân tán đa nút. Công việc GPU Tesla V100 thực thi số hình ảnh/giây nhiều hơn khoảng 5 lần so với GPU Tesla T4 , mặc dù đồng bằng TFLOP lý thuyết của chúng lớn hơn hai lần .

GPU Tesla V100 sử dụng bộ nhớ HBM2 nhanh hơn, điều này có tác động đáng kể đến hiệu suất đào tạo DL . Mẫu GPU Tesla V100 có công suất và mức giá cao hơn so với Tesla T4. Chúng tôi giới thiệu một môi trường linh hoạt nơi người dùng có thể sử dụng Tesla T4, Tesla V100 hoặc cả hai GPU trên Nền tảng bộ chứa OpenShift và cung cấp cho các kỹ sư ML thông qua Kubeflow. Lựa chọn và số lượng GPU sẽ phụ thuộc vào yêu cầu khối lượng công việc và mục tiêu giá cho môi trường ML/DL.

Bảng sau đây hiển thị tệp YAML mà chúng tôi đã sử dụng để triển khai TFJob trên bốn GPU T4 :

Bảng 1. Tệp YAML để triển khai TFJob

tf_nvidia_cnn.yml
apiVersion: kubeflow.org/v1beta2

loại: TFJob

metadata:

  nhãn:

    thí nghiệm: thí nghiệm

  tên: nvidiatfjob

  không gian tên: mặc định

thông số kỹ thuật:

  tfReplicaSpecs:

    tái bút:

      nútChọn:

         nvidia: t4

      bản sao: 1

      bản mẫu:

        metadata:

          tạoDấu thời gian: null

        thông số kỹ thuật:

          imagePullPolicy: Luôn luôn

          nútChọn:

            nvidia: t4

          hộp đựng:

          – lập luận:

            – con trăn

            – /opt/điểm chuẩn/tf_cnn_benchmarks.py

            – –batch_size=256

            – –model=resnet50

            – –num_batches=100

            – –num_gpus=1

            – –variable_update=horovod

            – –use_fp16=Đúng

            – –xla=Đúng

            hình ảnh: nvcr.io/nvidia/tensorflow:19.06-py3

            tên: tensorflow

            cổng:

            – cảng container: 2222

              tên: cổng tfjob

            tài nguyên:

              Hạn mức:

                nvidia.com/gpu: 1

            workingDir: /home/benchmarks/tf_cnn_benchmarks.py

          khởi động lạiPolicy: OnFailure

Công nhân:

      imagePullPolicy: Luôn luôn

      nútChọn:

         giới thiệu: công nhân

      bản sao: 4

      bản mẫu:

        metadata:

          tạoDấu thời gian: null

        thông số kỹ thuật:

          nútChọn:

            nvidia: t4

          hộp đựng:

          – lập luận:

            – con trăn

            – /opt/điểm chuẩn/tf_cnn_benchmarks.py

            – –batch_size=256

            – –model=resnet50

            – –num_batches=100

            – –num_gpus=1

            – –variable_update=horovod

            – –use_fp16=Đúng

            – –xla=Đúng

            hình ảnh: nvcr.io/nvidia /tensorflow:19.06-py3

            tên: tensorflow

            cổng:

            – cảng container: 2222

              tên: cổng tfjob

            tài nguyên:

              Hạn mức:

                nvidia.com/gpu: 1

            workingDir: /home/benchmarks/tf_cnn_benchmarks.py

          khởi động lạiPolicy: OnFailure

Cài đặt plug – in thiết bị GPU

Tổng quan

Phần này mô tả quy trình kích hoạt khối lượng công việc GPU được chứa trong OpenShift :

  • Cài đặt trình điều khiển NVIDIA
  • Cài đặt plug – in thiết bị GPU

Sử dụng GPU với OpenShift yêu cầu phải cài đặt trình điều khiển NVIDIA cho R ed Hat Enterprise Linux trên máy chủ. Sách trắng này giả định rằng GPU hiện diện trong tất cả các nút lưu trữ và nút ứng dụng. Để chuẩn bị các nút máy chủ, cần phải cài đặt trình điều khiển NVIDIA và thêm móc nối thời gian chạy vùng chứa trên mỗi nút .

Quy ước đánh máy

Hướng dẫn cài đặt sử dụng các quy ước đánh máy nhất định để chỉ định các lệnh và đầu ra màn hình. Cú pháp lệnh được xác định bởi phông chữ Courier . Đầu ra màn hình được in đậm .

 

Cài đặt plug-in thiết bị GPU

Cài đặt plug-in thiết bị GPU sau khi cài đặt thành công OpenShift 3.11 .

Lên lịch trình cắm thiết bị trên các nút bao gồm GPU

Thực hiện theo các bước sau:

  1. Gắn nhãn nút bằng cách chạy lệnh sau:

nút nhãn oc <node-with-gpu> openshift.com/gpu-accelerator=true

Các nhãn được sử dụng trong giai đoạn tiếp theo của quá trình cài đặt.

  1. Để cài đặt trình cắm thiết bị trên nút lưu trữ , hãy chạy các lệnh sau :

nút nhãn oc stor1.r5a.local openshift.com/gpu-accelerator=true

nút nhãn oc stor2.r5a.local openshift.com/gpu-accelerator=true

nút nhãn oc stor3.r5a.local openshift.com/gpu-accelerator=true

nút nhãn oc stor4.r5a.local openshift.com/gpu-accelerator=true

Triển khai daemonset plug – in thiết bị NVIDIA

Thực hiện theo các bước sau:

  1. Sao chép kho lưu trữ sau , chứa một số tệp yaml để sử dụng trong tương lai , bằng cách chạy:

git clone https://github.com/redhat-performance/openshift-psap.git

cd openshift-psap/blog/gpu/thiết bị-plugin
 

Daemonset mẫu device-plugin/nvidia-device-plugin.yml sử dụng nhãn bạn đã tạo trong Lên lịch trình cắm thiết bị trên các nút bao gồm GPU để các nhóm plugin chỉ chạy ở nơi có phần cứng GPU .

  1. Tạo daemonset trình cắm thiết bị NVIDIA bằng cách chạy lệnh sau:

oc tạo -f nvidia-device-plugin.ym l
 

  1. Xác minh rằng plug-in của thiết bị đang hoạt động chính xác bằng cách chạy lệnh sau:

oc get pods -n kube-system
NAME TÌNH TRẠNG SẴN SÀNG KHỞI ĐỘNG LẠI TUỔI
nvidia-device-plugin-daemonset-czzbs 1/1 Đang chạy 32 giây                      

nvidia-device-plugin-daemonset-hz5kr 1/1 Đang chạy 32 giây                      

nvidia-device-plugin-daemonset-w9bxj 1/1 Đang chạy 32 giây                      

nvidia-device-plugin-daemonset-xql7z 1/1 Đang chạy 32 giây                      

Bốn nút đang chạy vì chúng tôi đã gắn nhãn bốn nút lưu trữ trong bước trước .

  1. Xem lại nhật ký bằng cách chạy lệnh sau:

oc log nvidia-device-plugin-daemonset- czzbs -n kube-system
2019/07/12 2:19:45 Đang tải NVML
2019/07/12 2:19:45 Đang tìm nạp thiết bị.
2019/07/12 2:19:45 Bắt đầu theo dõi FS.
2019/07/12 2:19:45 Bắt đầu theo dõi hệ điều hành.
2019/07/12 2:19:45 Bắt đầu phục vụ trên /var/lib/kubelet/device-plugins/nvidia.sock
2019/07/12 2:19:45 Đã đăng ký plugin thiết bị với Kubelet
 

Nút quảng cáo tài nguyên mở rộng nvidia.com/gpu trong khả năng của nó:

oc mô tả nút stor1.r5a.local openshift.com | egrep’Capacity|Allocatable|gpu’

Dung tích:

nvidia.com/gpu: 1

phân bổ:

nvidia.com/gpu: 1

Các nút không cài đặt GPU không quảng cáo dung lượng GPU.

Triển khai một nhóm yêu cầu GPU

Sử dụng device-plugin/cuda-vector-add.yaml làm mô tả nhóm để chạy ảnh cuda-vector-add trong OpenShift. Dòng cuối cùng của tệp yêu cầu một GPU Nvidia từ OpenShift. Trình lập lịch biểu OpenShift nhìn thấy điều này và lên lịch nhóm cho một nút có GPU miễn phí. Sau khi yêu cầu tạo nhóm đến một nút, Kubelet phối hợp với trình cắm thiết bị để khởi động nhóm bằng tài nguyên GPU.

Để chạy bộ chứa hỗ trợ GPU trên cụm :

  1. Tạo một dự án để nhóm GPU hoạt động bằng cách chạy lệnh sau:

oc dự án mới nvidia

  1. Tạo và khởi động nhóm bằng cách chạy lệnh sau:

oc tạo -f cuda-vector-add.yaml
 

Vùng chứa kết thúc và xuất ra như sau:

oc get pods
TÊN TÌNH TRẠNG SẴN SÀNG KHỞI ĐỘNG LẠI TUỔI
cuda-vector-add 0/1 Đã hoàn thành 0 3 giây
nvidia-device-plugin-daemonset- czzbs 1/1 Đang chạy 0 9 phút
 

  1. Xem lại nhật ký để tìm bất kỳ lỗi nào bằng cách chạy lệnh sau:

nhật ký oc cuda-vector-add
[Thêm vectơ của 50000 phần tử]
Sao chép dữ liệu đầu vào từ bộ nhớ máy chủ sang thiết bị CUDA
Khởi chạy nhân CUDA với 196 khối 256 luồng
Sao chép dữ liệu đầu ra từ thiết bị CUDA vào bộ nhớ máy chủ
Kiểm tra ĐÃ ĐẠT
Xong
 

Đầu ra này giống như khi chúng tôi chạy bộ chứa trực tiếp bằng Podman hoặc Docker.

  1. Nếu bạn nhìn thấy lỗi “ quyền bị từ chối ” , hãy kiểm tra xem bạn có nhãn SELinux chính xác không .

Khắc phục sự cố SELinux

Bảng sau đây hiển thị nhãn của các tệp cần thiết cho bộ chứa GPU đang hoạt động:

Bảng 2. Nhãn tệp cho bộ chứa GPU

Tài liệu Nhãn SELinux
/dev/nvidia* xserver_misc_device_t
/usr/bin/nvidia-* xserver_exec_t
/var/lib/kubelet/*/* container_file_t