Đà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:
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:
- 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.
- Để 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:
- 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 .
- 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
- 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 0 32 giây
nvidia-device-plugin-daemonset-hz5kr 1/1 Đang chạy 0 32 giây
nvidia-device-plugin-daemonset-w9bxj 1/1 Đang chạy 0 32 giây
nvidia-device-plugin-daemonset-xql7z 1/1 Đang chạy 0 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 .
- 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 :
- 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
- 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
- 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.
- 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 |
Bài viết mới cập nhật
Thuần hóa sự hỗn loạn của công nghệ: Giải pháp phục hồi sáng tạo của Dell
Sự cố CNTT nghiêm trọng ảnh hưởng đến 8,5 triệu hệ ...
Dell PowerScale và Marvel hợp tác để tạo ra quy trình làm việc truyền thông tối ưu
Hiện đang ở thế hệ thứ 9, giải pháp lưu trữ Dell ...
Bảo mật PowerScale OneFS SyncIQ
Trong thế giới sao chép dữ liệu, việc đảm bảo tính ...
Danh sách kiểm tra cơ sở bảo mật PowerScale
Là một biện pháp bảo mật tốt nhất, chúng tôi khuyến ...