Hiện nay, hầu hết các máy tính, đặc biệt là máy tính xách tay, đều được tích hợp card đồ họa NVIDIA. Thiết bị này ra đời vào cuối thập niên 90s của thế kỷ trước, sử dụng chíp xử lý đồ họa GPU (graphics processing unit), với nhiệm vụ ban đầu là giúp tăng cường chất lượng hình ảnh trên máy tính, đặc biệt là máy tính chuyên dụng để chơi game. Tuy nhiên, với kiến trúc đặc biệt, GPU dần trở nên thích hợp và hiệu quả hơn CPU trong việc cài đặt các thuật toán xử lý song song. Thuật toán nhân ma trận là 1 trong số các thuật toán này.
Nhân ma trận nói riêng, và các phép toán ma trận (Đại số tuyến tính) có vai trò quan trọng trong khoa học máy tính, đặc biệt là lĩnh vực nghiên cứu Machine Learning và Deep Learning. Chúng đồng thời là công cụ không thể thiếu đối với nhà phân tích nghiệp vụ quản lý, kinh doanh và thương mại điện tử cho các vấn đề xây dựng, đánh giá, lựa chọn hệ thống KPIs nhằm tối ưu hóa mục tiêu đề ra, hay với nhà phân tích tài chính, chẳng hạn sử dụng mô hình mô phỏng Monte Carlo hoặc Hidden Markov Model để xấp xỉ một đại lượng nào đó mà mô hình toán-thống kê, ví dụ black-scholes, chưa thể đáp ứng được. Các mô hình mà các nhà kinh doanh, tài chính sử dụng như nói trên đều yêu cầu khối lượng tính toán ma trận rất lớn.
Trong bài này, chúng tôi trình bày cách sử dụng GPU cho tính toán ma trận và hiệu quả việc khai thác thiết bị này. Bạn đọc vui lòng kiểm tra các bước chuẩn bị phần mềm cần thiết cho Nvidia card như dưới đây để đảm việc truy cập GPU thực hiện được.
- Kiểm tra chip GPU qua model của máy hoặc Nvidia logo.
- Cài đặt Nvidia driver: Click ở đây, chọn driver phù hợp và tải về cài đặt. Sau đó, kiểm tra biểu tượng Nvidia trên thanh công cụ (đối với máy dùng Windows) hoặc gõ lệnh nvidia-smi (với máy dùng Linux) để biết cài đặt thành công. Người dùng Mac xin xem hướng dẫn ở đây.
- Cài đặt CUDA toolkit: Click ở đây, chọn phiên bản CUDA tương thích và cài đặt. Khi hoàn tất, cập nhật đường dẫn đến thư mục CUDA toolkit cho biến môi trường PATH của hệ thống: sử dụng System / Adv Settings / System Variables (Windows); lệnh export hoặc thiết lập profile (Linux).
- Cài đặt cudaDNN: Tương tự như với CUDA.
- Cài đặt thư viện tính toán cupy: Bạn đọc cần cài đặt python và pip. cupy được cài đặt qua pip hoặc conda. Giả sử phiên bản CUDA là 10.1 thì lệnh cài đặt cupy là: pip3 install –pre cupy-cuda101
- Sau cùng cài đặt Tensorflow-gpu: Tương tự như với cupy.
Chúng tôi test chương trình nhân 2 ma trận có kích thước là 300×1000 và 1000×700; thực hiện 15000 lần với các ma trận khác nhau, khởi tạo ngẫu nhiên. Chương trình sử dụng CPU với numpy và GPU với cupy. Hàm thư viện energyusage được dùng để đo thời gian thực thi và năng lượng tiêu thụ của chương trình với mỗi chip xử lý.

Kết quả như sau:

GPU hoàn tất xử lý với 60 lần nhanh hơn CPU, nhưng tiêu thụ điện năng ít hơn 880 lần. Thực tế tỷ lệ này có thể cao hơn nữa vì một phần lớn điện năng cho quạt làm mát CPU không được thống kê ở trên.
GPU đạt hiệu quả cao nhất khi các đơn vị tính toán độc lập tuyệt đối; tỷ lệ điện năng tiêu thụ tăng chậm hơn tỷ lệ tăng khối lượng tính toán. Trong khi đó CPU thì ngược lại. Khi cài đặt bài toán nói trên sử dụng Tensorflow-gpu, thời gian tính toán lần lượt là 525.31s trên CPU và 16.13s trên GPU. Các tensors của GPU được xác lập qua device name: /device:GPU:0. Nếu nhầm lẫn giữa CPU và GPU ở bước này sẽ dẫn đến một phần xử lý và dữ liệu được chuyển sang CPU. Điều đó làm cho thời gian thực thi lớn hơn rất nhiều so với việc thực thi thuần CPU.
Trên đây là phần trình bày cách thực hiện và hiệu quả ứng dụng GPU trên máy tính cho phép tính ma trận. Cảm ơn bạn đọc đã theo dõi.
Thanh Le, PhD.