+1

Rust For Machine Learning - GPU vs CPU

Tại sao chúng ta lại dùng GPU để huấn luyện mô hình học máy? GPU thì luôn có bộ nhớ giới hạn, cụ thể là giới hạn như thế nào đối với các nhiệm vụ liên quan đến học máy? Hãy cùng RustDEV Vietnam dùng thư viện Candle của HuggingFace thử nghiệm và tìm hiểu về những câu hỏi này dưới góc nhìn của một lập trình viên.

Trước hết, bên cạnh việc tương thích và tối ưu với “CUDA Kernel”, cũng phải nói rằng thư viện Candle đã được thiết kế rất tối ưu trong các tác vụ tính toán như nhân ma trận, tích vô hướng véc-tơ, tích chập, v.v. nó mặc định sử dụng các thư viện như MLK (”Mathematic Library Kernel”) của Intel vốn được tối ưu cho các dòng x86, có thể kích hoạt và sử dụng bộ lệnh CPU AVX/AVX2 hay SIMD để tăng tốc tính toán. Tất nhiên, việc sử dụng CPU hay GPU cho tính toán về cơ bản vẫn hoàn toàn trong suốt với lập trình viên, các lập trình viên chỉ cần chỉ rõ thiết bị nào sẽ dùng cho Tensor nào là xong, mọi thao tác tính toán xử lý trên Tensor về sau sẽ sử dụng đúng phần cứng mong muốn. Đoạn mã sau tạo hai Tensor ngẫu nhiên theo mô hình phân phối chuẩn, một trên CPU và một trên GPU.

let cpu_device = Device::Cpu;
let cuda_device = match Device::cuda_if_available(0)?;

let cpu_tensor_a = Tensor::randn(0f32, 1.0, (2048, 4096), &cpu_device)?;
let cpu_tensor_a = Tensor::randn(0f32, 1.0, (4096, 2048), &cpu_device)?;

Vậy nếu Candle (hay bất cứ thư viện nào khác) đã được tối ưu thì sao khi chạy trên CPU lại chậm hơn trên GPU? Chậm hơn như thế nào? Hơn nữa, nếu chúng ta muốn kết hợp cả CPU và GPU trong một nhiệm vụ học máy thì có được không? Ví dụ để tận dụng được thế mạnh riêng của cả hai phần cứng. Hoàn toàn có thể được nhưng chúng ta sẽ cần phải chú ý một số khác biệt, chẳng hạn chúng ta đều biết rằng về mặt lý thuyết thì “(a + b) * c” phải bằng “a * c + b * c”, rất tiếc đôi khi không phải như vậy. Lưu ý, đây không phải vấn đề do Rust 🙂

Hãy cùng RustDev Vietnam tìm hiểu và thực hành chủ đề này trong video “#0048 Rust For Machine Learning - GPU vs CPU” trên kênh Youtube RustDEV Vietnam.


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí