CUDA là công nghệ độc quyền của NVIDIA trên các dòng card đồ họa (GPU). Hiểu đơn giản CUDA core là nhân CPU đã giản lược bớt tính năng và số lượng core của GPU lớn hơn CPU nhiều lần. Một CPU thông thường có 2-4-8 core, CPU xịn hơn thì 32 core,… Còn GPU có hàng trăm đến hàng ngàn CUDA core, nhờ đó mà công việc tính toán song song GPU sẽ tính nhanh hơn.
Đối với Neural Network hay Deep Learning phải tính toán rất nhiều node và nhiều layer, do đó chạy bằng GPU sẽ cho tốc độ cao hơn CPU rất nhiều. Bài viết này chia sẻ cách làm quen với CUDA để khai thác sức mạnh của GPU trong các bài toán nhận dạng.
Chuẩn bị
Bài viết này sử dụng CUDA 10.0 chạy trên Windows 10, sử dụng Visual Studio 2019. GPU sử dụng là GTX 660 (khá là cũ) có 960 CUDA core. Các bạn nên tìm kiếm thông tin về GPU của mình trước khi sử dụng, một số dòng laptop có GPU của NVIDA cũng có thể chạy được.
Download CUDA 10.0 tại link: https://developer.nvidia.com/cuda-10.0-download-archive
Sau khi download xong bạn sẽ có file exe, tiến hành cài đặt như các phần mềm khác.
Lưu ý: không phải cứ có CUDA là sẽ chạy được, các bạn cần kiểm tra xem Compute Capability có phù hợp hay không tại link: https://developer.nvidia.com/cuda-gpus
Build source code example
Source code example nằm tại folder C:\ProgramData\NVIDIA Corporation\CUDA Samples\v10.0
Với CUDA 10.0 thì example hỗ trợ tới Visual Studio 2017, do đó các bạn cần cài thêm Platform toolset v141.
Sau khi mở Samples_vs2017.sln lên build các bạn sẽ gặp lỗi:
Error MSB4019 The imported project “C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160\BuildCustomizations\CUDA 10.0.props” was not found
Cách giải quyết là bạn vào folder: C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\extras\visual_studio_integration\MSBuildExtensions, copy tất cả file vào folder C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160\BuildCustomizations, sau đó tắt solution và mở lại.
Lưu ý: các bạn nên copy source code sang ổ D hoặc chạy Visual Studio bằng quyền Administrator.
Tiến hành build solution bạn sẽ có rất nhiều example được cung cấp sẵn như hình dưới
Kết quả render bằng GPU
Và xem bằng tool GPU-z các bạn sẽ thấy GPU load 100%, tức là GPU đang được sử dụng để tính toán
Nguyên lý hoạt động
GPU được tạo ra nhằm phục vụ cho đồ họa như vẽ hình ảnh trong game, Auto Cad,… Sau nhiều bước tính toán trong game như đổ bóng, phủ texture, blur,… vật thể sẽ cho ra hình ảnh hiển thị lên màn hình của gamer. Các bước tính toán đó về bản chất là tính toán vector, matrix để biến đổi thành matrix cuối cùng hiển thị lên màn hình.
Còn trong Machine Learning, kết quả chúng ta mong muốn là các giá trị phân lớp, hồi quy,… Mà hình ảnh thật ra là ma trận pixel, do đó ta có thể tính toán kết quả ma trận bằng GPU như render hình ảnh trong game.
Với độ chính xác của Deep Learning hiện nay & giá thành của GPU cũng trong tầm tay thì công nghệ CUDA sẽ ngày càng phổ biến hơn.