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ư chập (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.

SC08 và GPU

 

Đối với dân trong ngành tính toán hiệu năng cao (HPC – High Performance Computing), hội nghị SC (supercomputing conference) hàng năm là nơi để gặp gỡ, trao đổi về các tiến bộ mới trong lĩnh vực máy “ngốn số liệu”. Hội nghị SC năm nay được tổ chức tại Austin, Texas là hội nghị lần thứ 20 của ngành, tính từ hội nghị đầu tiên được tổ chức tại Orlando, Florida năm 1988. Trong lần thứ 20 này, SC08 đã chứng kiến sự chuyển hướng đáng kể trong ngành HPC, từ mô hình siêu máy tính truyền thống tốn kém sang các mô hình kinh tế hơn, đặc biệt là mô hình lập trình song song trên GPU. Dưới đây tôi tóm tắt lại những sự kiện chính trong hội nghị lần này có liên quan đến GPU, mặc dù còn vô số thứ khác để học hỏi từ SC08.

  • SC08 đánh dấu sự ra đời của siêu máy tính đầu tiên trên thế giới sử dụng GPU làm công cụ tính toán hữu hiệu và kinh tế. Tôi rất lấy làm tự hào vì chiếc siêu máy tính đó đến từ Tokodai (TiTech, Tokyo Institute of Technology), nơi tôi đã có cơ hội học tập và nghiên cứu trong nhiều năm liền kể từ ngày đầu tiên bước chân lên đất Phù Tang. Với tên gọi Tsubame, hệ thống này được đặt trên tầng 2 của trung tâm tính toán và thông tin khoa học toàn cầu, nằm cạnh thư viện trung tâm ở campus O-Okayama. Bằng cách lắp đặt thêm 170 khối Tesla dạng 1U, với mỗi khối gồm 4 card Tesla, tổng cộng hệ thống có thêm 170 x 4 = 680 Tesla GPU. Sự bổ sung kịp thời này đã cho phép Tsubame vượt lên vào vị trí 29 trong bảng tổng sắp LINPACK Benmark kỳ này, với khả năng tính toán có độ chính xác kép trên số thực là 77.48 TFLOP. Với một kinh phí khiêm tốn, ít hơn rất rất nhiều lần so với hệ thống ban đầu, và với thời gian lắp đặt kỷ lục (khoảng 1 tuần lễ) nhờ sự kết hợp tuyệt vời của các kỹ sư tài năng đến từ Sun Microsystem, NEC, và NVIDIA, Tsubame với Tesla chứng tỏ khả năng sử dụng GPU trong các hệ thống HPC là hoàn toàn hiện thực. Tokodai sẽ chào đón sự kiện này bằng một ngày đặc biệt, đúng vào thứ ba tuần sau 02/12 tại O-Okayama Campus. Bạn nào ở Nhật và có thời gian vui lòng đến dự cho vui.
  • SC08 chứng kiến sự hợp tác toàn diện giữa NVIDIA và NEC. Chắc chắn trong thời gian sắp tới, chúng ta sẽ được thưởng thức nhiều sản phẩm ngoạn mục dựa trên CUDA mà NEC mang lại cho người dùng mức cao.
  • Phần mềm huyền thoại Mathematica với phiên bản 7.0 chính thức hỗ trợ tự động tính toán song song trên các hệ thống đa lõi, và phiên bản “CUDA-enabled” sẽ được phát hành vào tháng Giêng năm 2009. Chúng ta cùng xem Wolfram Research nói gì về CUDA:

“Since its initial release, Mathematica has been adopted by over 3 million professionals across the entire global technical computing community, and it has had a profound effect on how computers are used across many fields,” said Joy Costa, director of global partnerships at Wolfram Research. “The prospect of a hundred fold increase in Mathematica 7 performance is staggering. CUDA enabled Mathematica will revolutionize the world of numerical computation.

  • Không những chỉ có các dàn máy khổng lồ, SC08 là nơi ra đời của một khái niệm mới, “Personal Supercomputer (PSC)”. Nếu trong thập niên 80, những chiếc máy PC của IBM đã tạo nên một cuộc cách mạng máy tính với công thức “Một người dùng – một PC”, thì hôm nay, với Tesla/Quadro GPU của NVIDIA, chúng ta có “Một nhà nghiên cứu, một PSC”. Cấu hình thông dụng của các PSC mà tôi có dịp tham gia lắp đặt gần đây bao gồm 1 card Quadro FX5800 phục vụ hiển thị đồ họa cùng 3 card Tesla C1060 phục vụ tính toán. Sự kết hợp này mang lại cho chúng ta khoảng 4 TFLOP khả năng tính toán trên số thực với độ chính xác đơn, cùng với hệ thống bộ nhớ 16GB DDR2, với giá thành khoảng 10,000 USD, rẻ hơn 100 lần so với một hệ máy có cùng khả năng tính toán sử dụng giải pháp CPU cluster, chưa kể đến không gian nhỏ gọn của chỉ một thùng máy lớn, thay vì cả một gian phòng, và chi phí điện năng hết sức tiết kiệm.

Cuộc chiến xử lý song song đã bắt đầu!!!

Cái nóng của mùa hè năm nay dường như đã làm nóng thêm bầu không khí chiến tranh giữa các đại gia trong ngành công nghiệp máy tính. Đó là cuộc chiến giành quyền kiểm soát thị phần xử lý song song trong một tương lai “hết sức gần” (độ một hai năm nữa) trên các kiến trúc đa lõi và chip đồ họa máy tính, giữa ba đại gia Intel, NVIDIA, AMD, và gần đây có cả Apple tham gia với tuyên bố về sản phẩm hết sức đình đám là OpenCL. Chúng ta hãy cùng nhau điểm lại các sự kiện đáng chú ý trong cuộc chiến này suốt hai năm gần đây.

Có lẽ cuộc chiến đa lõi này đã được bắt đầu vào ngày 8 tháng 11 năm 2006, khi NVIDIA, sau gần 4 năm trời nghiên cứu với khoảng 400 triệu đô la đầu tư, đã công bố một thế hệ chip đồ họa đa lõi hoàn toàn mới, với tên gọi GeForce 8800, mở đầu cho loạt chip GeForce 8, hay còn gọi tắt là G80, hoặc chính xác hơn là Tesla thế hệ 1 (tên này mới chỉ được đưa ra sau này). Ngoài khả năng vượt trội về mặt đồ họa, tiềm ẩn bên trong kiến trúc chip G80 là khả năng xử lý song song mức cao có thể lập trình được qua môi trường lập trình CUDA, được NVIDIA chính thức công bố bản beta vào ngày 16 tháng 2 năm 2007 (chính là ngày sinh nhật CEO của NVIDIA, Jen-Hsun Hoang, và cũng là ngày thành lập công ty NVIDIA).

Chỉ sau khi NVIDIA công bố chip G80 có sáu ngày, AMD đã tuyên bố về dự án AMD Stream Processor vào ngày 14 tháng 11 năm 2006. Cùng với dự án về phần cứng này, hàng loạt xúc tiến về mặt phần mềm cũng đã được AMD tiến hành cho đến nay, bao gồm cả đặc tả CTM (Close To the Metal), vốn đã bị “cho ra rìa” từ lâu và bộ phát triển phần mềm Stream SDK.

Tiếp tục mở rộng thị trường tính toán hiệu năng cao ở mức doanh nghiệp, ngày 20 tháng 6 năm 2007, NVIDIA đã chính thức giới thiệu dòng máy Tesla cho tính toán song song cùng với bộ công cụ lập trình CUDA, với phiên bản 1.0 chính thức được trình làng ngày 12 tháng 7 năm 2007, rồi phiên bản 1.1 nối tiếp vào ngày 14 tháng 11 cùng năm. Có thể nói những bước đi kế tiếp nhau này của NVIDIA đã tạo nên một sự khởi động đầy màu sắc cho mảng tính toán song song trên GPU, cả ở phía công nghiệp lẫn giới nghiên cứu khoa học tại các phòng lab ở nhiều trường đại học, viện nghiên cứu, và cả trong các công ty trong nhiều ngành công nghiệp khác nhau như dầu khí, tài chính, truyền thông đa phương tiện, y khoa, v.v… Mọi người có thể tham khảo thêm những gì thế giới đang tạo ra với CUDA ở đây.

Không chịu ngồi yên khi nhìn thấy tiềm năng to lớn của thị trường điện toán trực quan (visual computing), ngay từ khoảng gần cuối năm 2006, trong giới thạo tin công nghiệp đã râm ran về chuyện Intel tuyển thêm rất nhiều người cho một dự án chip đồ họa mới. Đến ngày 17 tháng 3 năm 2008, Intel đã chính thức trả lời mọi người qua thông cáo báo chí về kế hoạch chip đa lõi tương lai của công ty, trong đó phần đề cập về kiến trúc Larrabee nhấn mạnh rằng nó sẽ phục vụ cho môi trường điện toán trực quan.

Trong khi lời tuyên bố này của Intel vẫn đang còn làm tốn không biết bao nhiêu thời gian, công sức, và giấy mực của các phương tiện truyền thông, rồi của các web site chuyên về phần cứng đồ họa, thì ngày 2 tháng 6 năm 2008, NVIDIA đã làm cả thế giới ngạc nhiên với một công bố mới, được dự đoán là có khả năng làm thay đổi hẳn bộ mặt của ngành công nghiệp điện toán trong một ngày không xa. Tên của “quả bom tấn” đó là Tegra. Từ trước đến nay, ngoài kiến trúc x86 của Intel, chúng ta đã có dịp chứng kiến các kiến trúc phi x86 như PowerPC của Apple, Sparc của Sun Microsystem, … tung hoành trên chiến trường điện toán hiệu năng cao. Nhưng đã bao giờ bạn tưởng tượng ra được là, chúng ta sẽ không cần có mainboard để gắn tùm lum thứ lên đó, rồi tốn công sức và tiền bạc để giải nhiệt cho những thứ được gắn lên, và lại còn phải tốn một cái thùng bự để chứa nó không? Với Tegra của NVIDIA, điều đó đang trở thành hiện thực. Tegra không phải là chip đồ họa (GPU), cũng không phải là CPU thu nhỏ, mà là cả một hệ thống được đặt vào một con chip có kích cỡ 12mm x 12mm (144mm vuông), xài điện tối đa 4W. Chính xác nó là một SoC (System on a Chip).

Mọi người vẫn chưa hết bối rối với Tegra thì ngày 16 tháng 6 năm 2008, Apple đã đề đạt lên Hiệp hội Công nghiệp về Giao diện Lập trình Ứng dụng Media (tên gọi là Khronos), đặc tả ngôn ngữ lập trình song song kiểu C, gọi là OpenCL, vốn dự kiến sẽ được dùng trong hệ điều hành Mac OS kế tiếp của Apple. Tôi cũng đã tìm thấy một bài viết khác khá hay về tương lai của OpenCL ở đây. Cái vụ OpenCL này chắc sẽ còn chuyện để nói dài dài. Dạo này đi đâu thấy ai cũng hỏi về nó, mệt quá!

Nhằm đẩy nhanh tốc độ mở rộng thị trường xử lý song song cao cấp, ngày 17 tháng 6 năm 2008, NVIDIA đã chính thức giới thiệu dòng sản phẩm Tesla thế hệ 2, là sản phẩm tính toán song song trên chip đồ họa đầu tiên có khả năng tính toán cỡ Tera flop (siêu máy tính).

Không chịu thua kém, trong tháng Tám mùa hè nóng nực này, Intel đã đi tiếp những bước đi quan trọng trong cuộc đấu đa lõi của mình, bằng cách chính thức công bố chi tiết kỹ thuật của giải pháp Larrabee qua báo chí ngày 4 tháng 8 năm 2008, và sau đó tám ngày tại Hội nghị Đồ họa Máy tính thường niên 2008 (SIGGRAPH’08) với một bài viết chi tiết về mặt thiết kế ở đây. Ngoài ra, tại Diễn đàn các nhà phát triển Intel IDF’08, Intel cũng đã tung ra một cú đánh nỗ lực sau cùng của mùa hè này về phía CUDA bằng cách thông báo là sẽ nhanh chóng cho ra đời bộ công cụ hỗ trợ lập trình song song được tích hợp vào Microsoft Visual Studio, gọi là Intel Parallel Studio.

Mọi chuyện vẫn còn tiếp diễn. Ngày hôm nay (ngày 25 tháng 8 năm 2008) tại San Jose, NVIDIA đã mở màn lần đầu tiên trong lịch sử một hội nghị lớn về điện toán trực quan gọi là NVISION’08. Điểm đặc biệt của hội nghị này là nó bao gồm rất nhiều màn trình diễn đặc sắc về công nghệ trực quan, và có cả một hội nghị kỹ thuật chỉ tập trung bàn về CUDA. Chắc chắn là tôi sẽ nhanh chóng có bài tóm tắt nội dung của SIGGRAPH’08, IDF’08, và NVISION’08 có liên quan đến xử lý song song để học hỏi.