Chia sẻ GPU qua mạng với VMware vSphere Bitfusion: Tối ưu hiệu năng, ‘vắt kiệt’ tài nguyên

VMware tutorial - IT technology blog
VMware tutorial - IT technology blog

Vấn đề thực tế: Khi GPU là món đồ xa xỉ bị bỏ phí

Dân làm AI/Deep Learning chắc không lạ gì cảnh này: Team xin công ty cấp cho một con server gắn mấy con NVIDIA A100 hay RTX 3090 trị giá hàng trăm triệu đồng. Tuy nhiên, đời không như là mơ. Khi bạn cấp trực tiếp GPU cho một máy ảo (VM) qua cơ chế DirectPath I/O, con VM đó sẽ chiếm hữu hoàn toàn tài nguyên.

Kết quả là gì? Lúc Data Scientist đang ngồi code hoặc tiền xử lý dữ liệu, GPU hoàn toàn ngồi chơi xơi nước. Trong khi đó, đồng nghiệp khác muốn mượn một ít “sức mạnh” để test model nhanh lại không được do GPU đã bị khóa chặt. Tôi từng chứng kiến một lab nghiên cứu để dàn GPU chạy 100% công suất chỉ trong 2 tiếng mỗi ngày. 22 tiếng còn lại, đống phần cứng nghìn đô đó chỉ dùng để… sưởi ấm phòng server. Đây là sự lãng phí cực kỳ lớn.

Tại sao ảo hóa GPU lại khó đến thế?

Gốc rễ vấn đề nằm ở kiến trúc phần cứng. GPU ban đầu không được thiết kế để chia sẻ linh hoạt như CPU hay RAM. Trước đây, chúng ta thường có hai lựa chọn nhưng đều tồn tại nhược điểm chí mạng:

  • PCI Passthrough: Mang lại hiệu năng 100% nhưng chỉ 1 VM dùng được 1 GPU. Muốn chuyển sang máy khác, bạn phải tắt VM và cấu hình lại từ đầu. Rất thủ công.
  • NVIDIA vGPU (GRID): Cách này cho phép chia nhỏ GPU thành các profile. Tuy nhiên, license NVIDIA Enterprise cực kỳ đắt đỏ (thường trên $500/user/năm) và chỉ hỗ trợ một số dòng card Tesla/Quadro nhất định.

Bitfusion xuất hiện để giải quyết bài toán này: Làm sao để máy ảo ở Server A mượn được sức mạnh GPU từ Server B qua mạng?

Bitfusion: Giải pháp ‘mềm’ cho bài toán cứng

Thay vì can thiệp vào tầng vật lý, Bitfusion hoạt động theo mô hình Client-Server. Nó hoạt động như một lớp proxy cho các lời gọi hàm CUDA. Máy có GPU vật lý đóng vai trò Server, máy chạy code AI là Client. Hai bên kết nối với nhau qua mạng Ethernet hoặc RDMA.

Điểm ăn tiền của Bitfusion là tính minh bạch. Bạn không cần sửa một dòng code AI nào. TensorFlow hay PyTorch vẫn nhận diện như đang có GPU thật tại chỗ. Đặc biệt, bạn có thể chia nhỏ GPU theo tỷ lệ phần trăm dung lượng RAM (ví dụ: cắt 20% của một con A100 40GB cho một task nhỏ).

Bước 1: Triển khai Bitfusion Server (Appliance)

Trước tiên, hãy tải file OVF của Bitfusion từ trang chủ VMware. Bitfusion Server thực chất là một máy ảo chạy Photon OS đã được tinh chỉnh tối ưu.

  1. Deploy OVF lên vCenter. Bạn phải chọn đúng Host đang cắm card GPU vật lý.
  2. Trong phần cấu hình phần cứng VM, hãy thêm PCI Device và chọn card NVIDIA tương ứng.
  3. Lưu ý quan trọng: Bật tính năng Reserve all guest memory. Nếu thiếu bước này, tính năng Passthrough sẽ không hoạt động.
  4. Sau khi khởi động, truy cập giao diện web Bitfusion qua port 443 để kích hoạt và kết nối với vCenter.

Bước 2: Cấu hình Client trên máy ảo Linux

Đây là môi trường làm việc của Data Scientist. Tôi thường ưu tiên Ubuntu 20.04 hoặc 22.04. Điểm cộng lớn là bạn không cần cài Driver NVIDIA nặng nề ở đây, chỉ cần cài bộ Bitfusion Client nhẹ hơn nhiều.

Thêm repo và cài đặt bằng lệnh sau:

# Cài đặt package client (giả sử bạn đã có file deb)
sudo dpkg -i bitfusion-client-ubuntu2004_4.0.0-11_amd64.deb
sudo apt-get install -f

Tiếp theo, hãy kết nối máy client này với server bằng token bảo mật từ vCenter:

# Kiểm tra kết nối tới cụm GPU tập trung
bitfusion list_servers

Nếu danh sách GPU hiện ra với trạng thái “Active”, hệ thống của bạn đã sẵn sàng khai hỏa.

Bước 3: Chạy ứng dụng AI qua mạng

Đây là lúc sự kỳ diệu xảy ra. Thay vì chạy python train.py, bạn chỉ cần bọc nó qua lệnh của Bitfusion. Giả sử bạn muốn mượn 1 GPU và chỉ dùng 50% bộ nhớ của nó:

# Mượn 1 GPU, giới hạn 50% memory để nhường người khác
bitfusion run -n 1 -p 0.5 python3 my_model.py

Bitfusion Client sẽ đánh chặn (intercept) các lời gọi CUDA API và đẩy chúng qua mạng tới Server xử lý. Với hạ tầng mạng 10Gbps, độ trễ thường chỉ dưới 10%, gần như không thể phân biệt với card cắm trực tiếp.

Kinh nghiệm thực chiến: Đừng để mạng là nút thắt

Trong quá trình triển khai thực tế, tôi rút ra 3 lưu ý sống còn:

  • Băng thông mạng: Tuyệt đối không dùng mạng 1Gbps. Nó sẽ khiến GPU mạnh đến mấy cũng chạy chậm như rùa. Hãy dùng ít nhất 10Gbps. Nếu có điều kiện, hãy triển khai Mellanox với RDMA (RoCE) để đạt hiệu năng đỉnh nhất.
  • Đồng bộ phiên bản: Server và Client nên chạy cùng version. Tôi từng mất trắng một buổi chiều chỉ vì Server bản 4.0 còn Client bản 3.5 khiến chúng không thể nhìn thấy nhau.
  • Jumbo Frames: Hãy bật MTU 9000 trên toàn bộ hạ tầng switch. Việc này giúp giảm tải cho CPU khi truyền tải các khối dữ liệu lớn giữa Client và Server.

Khi chuyển sang Bitfusion, hiệu suất sử dụng phần cứng của team tôi tăng vọt. Thay vì mỗi người chiếm một card, giờ đây 4-5 người có thể chia sẻ chung một con GPU khủng cho các tác vụ nhỏ. Nếu bạn đang đau đầu với chi phí mua sắm GPU, Bitfusion chính là lời giải thực tế nhất hiện nay.

Share: