CUDA-X

Sau hơn 10 năm liên tục phát triển, kiến trúc thiết bị tính toán hợp nhất CUDA (Compute Unified Device Architect) giờ đây đã phát triển thành nền tảng tính toán quan trọng cho hầu hết các lĩnh vực then chốt của khoa học và công nghệ, bao gồm tính toán hiệu năng cao, máy học, tự động hóa, và đồ họa.

CUDA-X là một tên gọi mới cho tập hợp các thư viện, công cụ phát triển, cũng như các công nghệ có liên quan được xây dựng trên cơ sở CUDA nhằm phục vụ tốt hơn nhu cầu phát triển các ứng dụng nâng cao cho các lĩnh vực vừa được đề cập ở trên.

Đã thành thông lệ, mỗi phiên bản CUDA mới được phát hành sẽ mang lại những hỗ trợ hệ thống cần thiết cho kiến trúc GPU vừa mới được giới thiệu, bao gồm trình điều khiển thiết bị phần cứng và bộ công cụ phát triển phần mềm tương thích với nhiều hệ điều hành khác nhau, gồm có Windows, Linux và MacOS. Phiên bản cập nhật CUDA 10.1 vừa được phát hành ngày hôm nay giúp chúng ta tận dụng tốt nhất sức mạnh tính toán của kiến trúc GPU mới với tên gọi Turing, là kiểu GPU đầu tiên đáp ứng tốt cho cả ba loại yêu cầu về đồ họa cao cấp, trí tuệ nhân tạo, và tính toán hiệu năng cao.

Về phương diện lập trình, CUDA phiên bản 10 tiếp tục sứ mệnh quan trọng là mang khả năng lập trình song song đến với tất cả mọi người, như đã được cam kết từ 10 năm về trước, khi CUDA chỉ mới bắt đầu những bước đi đầu tiên của mình. Sau 10 năm, NVIDIA giới thiệu một mô hình lập trình song song mới dựa trên khái niệm CUDA Graph giúp cho việc thực thi các tác vụ tính toán song song hiệu quả hơn, rồi khả năng kết nối tốt hơn với các tác vụ đồ họa trên Windows/Linux/MacOS sử dụng Vulkan/Direct X 12 API, thêm vào đó khả năng tính toán với độ chính xác 16 bit cần cho các ứng dụng AI, cùng với một loạt các cải tiến trên trình biên dịch NVCC để tận dụng tối đa độ linh hoạt trong tính toán với nhiều mức chính xác (32-bit/16-bit/8-bit/4-bit) của kiến trúc Turing và đơn vị tính toán Tensor Core.

Ở một mức cao hơn mức hỗ trợ hệ thống như tôi vừa giới thiệu sơ qua ở trên, CUDA-X còn mang lại cho cộng đồng phát triển phần mềm những công cụ vô giá, giúp tiết kiệm thời gian, tiền bạc, công sức để tạo ra các ứng dụng tiên tiến hữu ích hơn với một tốc độ nhanh hơn rất nhiều.

Một thư viện quan trọng bậc nhất trong bộ công cụ CUDA-X chính là thư viện tính toán ma trận không thưa được tối ưu cho các kiểu GPU của NVIDIA, có tên gọi là cuBLAS. Đây là thư viện cài đặt hầu hết các phép toán đại số tuyến tính nền tảng, dựa trên thư viện nổi tiếng cùng tên là BLAS, vốn là tiêu chuẩn cho tính toán hiệu năng cao trên các siêu máy tính trước đây. Phiên bản cuBLAS mang lại khả năng tính toán nhanh hơn từ 6 lần cho đến 17 lần so với phiên bản BLAS chạy trên CPU.

Nếu cuBLAS được thiết kế riêng cho tính toán trên ma trận không thưa, thì cuSPARSE chính là người anh em của nó phục vụ cho các tác vụ trên ma trận thưa, vốn được sử dụng rất phổ biến trong lĩnh vực xử lý ngôn ngữ tự nhiên. Phiên bản cuSPARSE chạy nhanh hơn phiên bản CPU BLAS (với thư viện MKL của Intel) tới 8 lần, tùy theo mức độ phức tạp của tác vụ tính toán.

Một phiên bản mã nguồn mở, được kỳ vọng là thế hệ kế tiếp cho cuBLAS, cũng đang được phát triển song song gọi là CUTLASS. Đây là tập hợp các phiên bản trừu tượng hóa kiểu C++ template dùng để cài đặt các phép toán nhân ma trận ở mọi cấp độ (BLAS cấp độ 1, 2 hay 3), ở mọi phạm vi (trên máy tính đơn với 1 GPU, nhiều GPU, hay ở mức đa máy tính đa GPU).

Dựa trên kinh nghiệm phát triển thư viện cuBLAS và cuSPARSE, một thư viện tối quan trọng cho lĩnh vực Deep Learning là cuDNN cũng đã được phát hành, bao gồm các khối tính toán hiệu năng cao phục vụ các tác vụ cơ bản như xoắn (convolution), kích hoạt, và biến đổi tensor. Chúng ta có thể nói là nếu không có cuDNN thì sẽ không có lĩnh vực Deep Learning bùng nổ như hiện nay.

Nếu cuDNN là thư viện không thể thiếu cho việc cài đặt các tác vụ huấn luyện trong lĩnh vực Deep Learning, TensorRT lại là thành phần vô cùng thiết yếu trong việc triển khai các mô hình mạng đã học được vào trong các ứng dụng thực tế. TensorRT giúp tối ưu hóa các tác vụ tính toán trong các mô hình mạng đã học khi thực thi trên từng loại GPU khác nhau, từ loại mức thấp giành cho rô bốt, thiết bị IOT, cho đến mức cao như ở các trung tâm dữ liệu, vốn cần phải đáp ứng hàng triệu yêu cầu hỏi đáp trong một mức thời gian ngắn.

Có hai thư viện mới được phát triển gần đây nhằm cung cấp khả năng tiền xử lý dữ liệu huấn luyện hiệu quả hơn thông qua việc sử dụng tối đa sức mạnh tính toán của các GPU cao cấp vốn được sử dụng trong quá trình huấn luyện dữ liệu, đó là nvJPEGDALI. Dữ liệu huấn luyện dưới dạng hình ảnh/video cần phải được giải nén và sao chép vào bộ nhớ GPU, sao đó tiến hành các bước tiền xử lý như cân chỉnh kích thước, tạo các biến thể thông qua các phép biến đổi hình học, tăng cường độ sáng, độ rõ, cân bằng màu sắc, v.v… Hoặc dữ liệu huấn luyện đã được chuẩn bị để đưa vào huấn luyện với một framework như Caffe cần phải chuyển đổi thành một định dạng khác phù hợp với Pytorch, với TensorFlow, với MxNet, với Chainer, v.v… Cho đến trước khi hai thư viện này được phát hành, hầu hết các tác vụ tốn kém thời gian này vẫn phải được tiến hành trên CPU và hoàn toàn không có một bộ công cụ tiêu chuẩn công nghiệp nào đáp ứng các yêu cầu vừa nêu.

Một trong những chủ đề nóng bỏng trong những năm gần đây của thế giới AI là làm sao tận dụng được các tri thức/kinh nghiệm đã học được cho việc giải một loại bài toán cụ thể vào việc giải một loại bài toán cụ thể khác, mà thuật ngữ chuyên môn gọi là Transfer Learning. Bộ công cụ Transfer Learning Toolkit trong CUDA-X là một nỗ lực giúp đẩy nhanh quá trình nghiên cứu phát triển trong lĩnh vực mới mẻ và đầy lý thú này.

Với sự tràn ngập của dữ liệu video, cũng như các đặc trưng phong phú hơn nhiều so với hình ảnh tĩnh mà chúng ta có thể rút trích ra từ video, lĩnh vực IVA (Intelligent Video Analytics), tạm dịch là Phân tích Dữ liệu Video Thông minh, đang có sự bùng nổ cả về nghiên cứu và ứng dụng, với mục tiêu hướng tới các Đô thị Thông minh (Smart City) ở khắp nơi trên thế giới, nhằm mang lại cuộc sống tốt đẹp hơn cho cư dân ở các đô thị đông đúc, vốn vô cùng phức tạp về quản lý giao thông, dịch vụ tiện ích, và bảo đảm an ninh. Bộ công cụ DeepStream SDK sử dụng Deep Learning for Video Analytics, cùng với chương trình hướng tới đô thị thông minh Metropolis của NVIDIA, là một nỗ lực lớn lao khác đang từng ngày từng giờ có thêm được rất nhiều ứng dụng hữu ích phục vụ cho đời sống của con người.

Cùng đồng hành với bộ công cụ DeepStream SDK trong việc xử lý dữ liệu video là bộ công cụ Optical Flow SDK, được cài đặt bằng cách sử dụng các tính năng gia tốc phần cứng từ các đơn vị xử lý video có trong GPU của NVIDIA, giúp chúng ta tính toán được các luồng quang học (optical flow) theo thời gian thực. Có thể nói luồng quang học là cấu trúc quan trọng bậc nhất thể hiện bản chất chuyển động có trong dữ liệu video, bao gồm cả chuyển động của các đối tượng có trong video, ví dụ như xe hơi chạy từ phải ssang trái, người bộ hành đang chuyển động hướng về phía xe đang chạy, và chuyển động của phương tiện quan sát, ghi hình video đó, ví dụ như camera đang quét từ trên xuống dưới, phóng to, thu nhỏ, v.v Có thể nói, đến trước khi có bộ công cụ Optical Flow SDK từ NVIDIA được phát hành, việc tính toán luồng quang học theo thời gian thực, kể cả trên các GPU cao cấp, vẫn là một ước mơ lớn lao của cộng đồng nghiên cứu và phát triển các ứng dụng dựa trên thị giác máy tính. Và ước mơ đó giờ đã là hiện thực.

 

Cập nhật blog

Đầu tháng Sáu năm ngoái, tôi có nói về việc thay đổi gói giao diện của blog sang Annotum, một theme khá hay của WordPress phục vụ cho việc viết các bài có liên quan đến khoa học kỹ thuật rất tốt (xem bài “Cập nhật theme“). Thật là không may khi đến tháng Mười Một sau đó, Annotum thông báo phát hành phiên bản sau cùng 2.1.1.1 đúng năm năm sau ngày phát hành phiên bản đầu tiên (ngày 22 tháng Mười Một năm 2011) [chi tiết xem ở đây]. Cũng may là tôi cũng chưa kịp chuyển đổi các bài viết cũ trên blog cho phù hợp với giao diện của Annotum.

Cuối cùng tôi cũng tìm được cái theme mới như các bạn đang thấy. Hy vọng trong quá trình sử dụng, tôi sẽ có thời gian để chỉnh sửa nó nhiều hơn.

Kế hoạch viết bài của tôi trong thời gian tới sẽ tập trung vào các chủ đề sau đây:

  • Siêu máy tính trên nền tảng DGX-x
  • Xử lý song song với Deep Learning
  • Xử lý song song với Computer Vision
  • Xử lý song song với ADAS cho Self-Driving Cars
  • Tối ưu hóa ứng dụng AI
  • Tối ưu hóa ứng dụng điện toán đám mây

CUDA 8.0 & cuDNN 5.0 ra lò

Sau một thời gian dài thử nghiệm, phiên bản CUDA 8.0 RC đã được cho ra lò hôm nay. Trọng tâm của CUDA 8.0 là hỗ trợ kiến trúc GPU mới với mã hiệu Pascal.

Bạn nào muốn dùng thử có thể vào các liên kết dưới đây nhé.

  1. Giới thiệu về kiến trúc GPU Pascal (bài viết, bài thuyết trình tại hội nghị GTC 2016)
  2. Download CUDA 8.0 RC
  3. Các tính năng mới của CUDA 8.0 (bài viết, bài thuyết trình tại hội nghị GTC 2016)

Cùng với CUDA 8.0, phiên bản cuDNN 5.0 hỗ trợ tính toán hiệu năng cao cho các ứng dụng Deep Learning cũng đã được phát hành. Thông tin chi tiết có thể tham khảo ở đây.

Tôi sẽ có các bài viết chuyên sâu về CUDA 8.0 & cuDNN 5.0 trên trang này.