Sử dụng GPU nodes
Tài liệu này hướng dẫn bạn sử dụng bộ xử lý đồ họa (GPU) trên GPU node của Kubernetes Engine cluster.
GPU cung cấp khả năng xử lý đặc biệt hiệu quả cho các tác vụ như xử lý hình ảnh, học máy (Machine Learning), xử lý ngôn ngữ tự nhiên, video transcode, … Dịch vụ Kubernetes Engine cho phép bạn khởi tạo node pool với phần cứng GPU của NVIDIA®.
Khởi tạo
Để khởi tạo các node có GPU, hãy lựa chọn cấu hình theo ý muốn tại bước tạo node pool, tham khảo tạo và xóa cluster
Cài đặt
- NVIDIA GPU device drivers
Khi lựa chọn cấu hình node pool có GPU, hệ thống sẽ tự động cài đặt sẵn driver tương ứng cho bạn
- K8s device plugin
Plugin tích hợp NVIDIA GPU cho Kubernetes
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: ConfigMap
metadata:
name: nvidia-device-plugin-config
namespace: kube-system
data:
config.yaml: |
version: v1
flags:
migStrategy: "none"
failOnInitError: false
nvidiaDriverRoot: "/"
plugin:
passDeviceSpecs: false
deviceListStrategy: "envvar"
deviceIDStrategy: "uuid"
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: nvidia-device-plugin-daemonset
namespace: kube-system
spec:
selector:
matchLabels:
name: nvidia-device-plugin-ds
updateStrategy:
type: RollingUpdate
template:
metadata:
labels:
name: nvidia-device-plugin-ds
spec:
tolerations:
- key: nvidia.com/gpu
operator: Exists
effect: NoSchedule
priorityClassName: "system-node-critical"
containers:
- name: nvidia-device-plugin-ctr
image: nvcr.io/nvidia/k8s-device-plugin:v0.12.3
args:
- --config-file=/etc/nvidia-device-plugin/config.yaml
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop: ["ALL"]
volumeMounts:
- name: device-plugin
mountPath: /var/lib/kubelet/device-plugins
- name: config
mountPath: /etc/nvidia-device-plugin/
volumes:
- name: device-plugin
hostPath:
path: /var/lib/kubelet/device-plugins
- name: config
configMap:
name: nvidia-device-plugin-config
EOF
Sử dụng
Sau khi cài đặt và khởi chạy plugin thành công, Kubernetes node sẽ expose thêm một loại tài nguyên nvidia.com/gpu
, bạn có thể cấu hình pod sử dụng GPU
Ví dụ như sau:
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
name: gpu-pod
spec:
restartPolicy: Never
containers:
- name: cuda-container
image: nvcr.io/nvidia/k8s/cuda-sample:vectoradd-cuda10.2
resources:
limits:
nvidia.com/gpu: 1 # requesting 1 GPU
tolerations:
- key: nvidia.com/gpu
operator: Exists
effect: NoSchedule
EOF