Mục lục bài
Vì sao nên chạy AI trong container
- Mỗi dự án ghim phiên bản CUDA runtime, PyTorch, thư viện riêng — không phá nhau.
- Máy chủ chỉ cần driver NVIDIA; CUDA runtime nằm trong image.
- Chuyển từ máy thử nghiệm sang máy chủ sản xuất bằng cùng một image.
Lưu ý: Container vẫn dùng driver của máy chủ. Image cần CUDA runtime mới hơn khả năng của driver sẽ không chạy — xem bảng tương thích trong ghi chú phát hành CUDA.
Các bước thực hiện
Tiến độ chỉ lưu trên trình duyệt này.
Bước 1: Gỡ các gói Docker không chính chủ
Bash Lệnh báo gói chưa cài là bình thường. Dữ liệu trong
/var/lib/dockerkhông bị xoá.Bước 2: Cài Docker Engine từ kho của Docker
Bash Cảnh báo: Thêm người dùng vào nhóm
docker(sudo usermod -aG docker $USER) tiện nhưng tương đương cấp quyền root trên máy. Chỉ thêm người thật sự quản trị máy.Bước 3: Cài NVIDIA Container Toolkit
Bash nvidia-ctk runtime configureghi runtime NVIDIA vào/etc/docker/daemon.json. Nếu file đó đã có cấu hình khác, sao lưu trước khi chạy.Bước 4: Chạy container với --gpus
Bash Toolkit tự gắn
nvidia-smivà thư viện driver vào container, nên imageubuntutrống vẫn gọi đượcnvidia-smi.Bước 5: Chạy image PyTorch của NVIDIA NGC
Image NGC đóng gói sẵn PyTorch, CUDA, cuDNN, NCCL đã được NVIDIA kiểm thử cùng nhau. Chọn tag trên trang NGC Catalog, đối chiếu yêu cầu driver trong ghi chú phát hành của tag đó.
Bash Mẹo:
--ipc=host(hoặc--shm-sizeđủ lớn) tránh lỗi bộ nhớ chia sẻ khi DataLoader dùng nhiều worker.Bước 6: Khai báo GPU trong docker compose
compose.yaml Bash
Kiểm tra thành công
Thành công khi container liệt kê đúng số GPU và lệnh Python in OK kèm số GPU.
Lỗi thường gặp & cách sửa
could not select device driver "" with capabilities: [[gpu]]
Nguyên nhân thường gặp: Chưa cài NVIDIA Container Toolkit hoặc chưa cấu hình runtime rồi khởi động lại Docker.
Container đang chạy bỗng báo Failed to initialize NVML: Unknown Error
Nguyên nhân thường gặp: Thường gặp khi systemd nạp lại cấu hình cgroup và container mất quyền truy cập thiết bị GPU.
Khởi động lại container để lấy lại thiết bị. Về lâu dài, cập nhật Container Toolkit và cân nhắc dùng CDI theo hướng dẫn của NVIDIA:
DataLoader worker bị kill, lỗi bus error hoặc shared memory
Nguyên nhân thường gặp: Container mặc định có /dev/shm rất nhỏ.
Thêm --ipc=host hoặc --shm-size=16g (chỉnh theo RAM máy); trong compose dùng ipc: host hoặc shm_size.
CUDA driver version is insufficient for CUDA runtime version
Nguyên nhân thường gặp: Image dùng CUDA runtime mới hơn khả năng của driver trên máy chủ.
Chọn tag image cũ hơn phù hợp driver, hoặc nâng driver theo bài cài driver & CUDA.
Bước tiếp theo
Nguồn chính chủ
Lệnh, tên gói và tham số thay đổi theo phiên bản. Trước khi chạy trên máy thật, hãy kiểm tra phiên bản mới nhất tại trang chính chủ:
- Docker — Install Docker Engine on Ubuntu
- NVIDIA Container Toolkit — Installation Guide
- NGC Catalog — PyTorch container
- Docker Compose — GPU support
Giới hạn của bài
- Tag image
25.08-py3chỉ minh hoạ định dạng; hãy chọn tag theo driver và nhu cầu của bạn. - Bài không đề cập Kubernetes/GPU Operator và Docker rootless.
Kỹ sư HQG khảo sát, lên cấu hình, lắp đặt và bàn giao hạ tầng AI chạy được thật.