HPC (P3) – CUDA, đội xanh Geforce GTX cho Deep Learning giá rẻ

Như kết luận trong phần trước, CUDA là kiến trúc lựa chọn cho HPC của tôi. Và cũng chẳng phải thắc mắc nhiều, tức là chỉ có cách trung thành với các card đồ hoạ sản xuất bởi NVIDIA. Tuy nhiên, NVIDIA cũng không hổ danh là nhà sản xuất GPU số 1 thế giới nên cũng đủ để đau đầu lựa chọn sản phẩm GPU nào phù hợp nhất. Đương nhiên, nếu xuất phát điểm không phải chỉ để dành cho nghiên cứu cùng với túi tiền cực kỳ rủng rỉnh không cần quan tâm đến giá cả, cứ con mới nhất, xịn nhất mà mua. Nhưng nếu nghĩ đến hiệu năng với giá pp (price/performance) cho một newbie trong DL thì chuyện trở lựa chọn nào trở thành một bộ môn khoa học nghiêm túc hơn nhiều. Trên thế giới, việc sử dụng GPU và cụ thể là với NVIDIA CUDA đã mang lại sức mạnh siêu máy tính đầu tiên vượt ngưỡng 10 petaFLOPS, chiếc siêu máy tính mạnh thứ 2 trên quả đất, sau Thiên Hà, với tên là Titan.
Các bạn có thể ngó thêm thông tin về siêu máy tính mạnh số 2 thế giới ở đây nhé.

Quay trở lại với quá trình dựng HPC của mình, bắt đầu với việc chọ GPU nào của NVIDIA. Trong thời gian 10 năm trở lại đây, NVIDIA có 4 dòng kiến trúc thiết kế GPU chính và có sở thích gắn tên các nhà khoa học lớn trong lịch sử với mỗi dòng đó. Kiến trúc thiết kế Fermi (GTX500-600 series), Kepler (GTX 700 series), hiện tại là Maxwell (GTX 900 series) và cuối năm nay, hy vọng sẽ xuất xưởng chip GPU dòng Pascal. Tại mỗi dòng thì sẽ có 3 cấp độ, dành riêng cho điện toán máy chủ cao cấp Tesla, máy trạm trung cấp Quadro, và game thủ thứ cấp Geforce GTX và giá tiền cũng từ rất cao xuống đến bình dân…

Vậy chọn GPU nào cho DL?

Nhiều người lầm tưởng đã làm việc thì cứ phải chọn dòng cho trạm làm việc Quadro. Để học DL thì chỉ có thừa tiền lắm mới thế. Quadro, về cơ bản là những con chip được lựa chọn kỹ càng (theo ASIC chẳng hạn) và thiết kế dùng làm đồ hoạ, đổ bóng 3D, etc chứ bản chất cũng không khác dòng Geforce rẻ tiền hơn rất nhiều (đôi khi là 1/4  ~  1/10 giá) với cùng hiệu năng.  Về phần cứng là vậy, tôi nghĩ cơ bản chip giống hệt và chỉ có Nvidia viết driver riêng thành từng dòng nên làm cho card Quadro có driver được chăm chút và test kỹ càng hơn rất nhiều khi release (sẽ ít lỗi phần mềm hơn, nhưng release tính năng mới sẽ chậm hơn). Driver cúa dòng game thủ GeForce đôi khi bị cắt bớt/ẩn tính năng của chip phần cứng đi. Nhiều cư dân mạng đôi khi hack một tý để dùng driver của Quadro cho Geforce còn được nữa là. Được cái tên đặt trong Quadro khá mạch lạc theo các kiến trúc chip GPU. Ví dụng Quadro Fx5600 là dòng Fermi, Quadro K6000 là dòng Kepler (tương đương con GTX 780 Ti của tôi, dòng GK110), Quadro M6000 là dòng Maxwell.
Tesla là một dòng card đồ hoạ cao cấp dành cho máy chủ và xử lý thuần tuý, và không có kết xuất ra màn hình (trừ một số đời ơ kìa ấm ớ, không hiểu sao lại có) Về chip thì cơ bản vẫn vậy, theo dòng nhưng các tính năng tính toán, đặc biệt là dấu phẩy động FP được kích hoạt đầy đủ và tối ưu nhiều nhất có thể (Khả năng chip có khi vẫn thế nhưng bọn Xanh nó set disable bớt đi ở các dòng rẻ đi chứ không sản xuất thành 1 con chip dòng Tesla riêng đâu??? Láo quá!) Nhưng gì thì gì, Quadro và Tesla thì có cái rất hay cho DL là bộ nhớ khủng, thường gấp 2, gấp 3 dòng phổ thông game thủ Geforce phổ thông, một trọng yếu cho các ma trận DL cỡ lớn hơn bình thường chút mà tôi sẽ đề cập đến sau này trong series về Deep Learning.

Cùng kiến trúc và chip GPU mã GK110, số nhân CUDA như nhau, GTX 780 Ti với 3GB RAM có giá tầm 600$, Quadro K6000 12GB RAM giá 4800$ và Tesla K40 giá 5800$. Mà nếu chạy mấy cái task vẽ vời dùng ma trận cỡ nhỏ, tôi nghĩ rằng sẽ chẳng khác biệt đáng kể về performance (Dòng GTX của tôi là dòng khủng, card độ, ép xung nên có khi còn nhanh hơn ấy.)


Tesla K40 với FP64 ở mức vượt trội gấp 8 đến 10 các card cùng GPU ở các dòng sản phẩm còn lại, thích hợp với tính toán mô phỏng phản ứng, hóa dầu, địa chất, etc. Cái này khả năng một phần thiết kế mạch, một phần các phần mềm driver các dòng còn lại bị vô hiệu hoá chứ con chip GPU có khi như nhau thôi nhể. Siêu cuội Nvidia đa cấp với giá chát chúa $5800.


Quadro K6000 hầu như không vượt trội gì so với GTX, ngoài bộ driver được test kỹ và VRAM khủng. Giá 4800$, tức là thêm $4K chỉ để được driver và dịch vụ support của Nvidia mức pro + + với 9GB extra VRAM. Dân đồ họa thì ưa thích dòng này vì sự bền bỉ và support tận răng cho các ứng dụng kết xuất và chỉnh sửa ảnh, video.


EVGA GTX 780 Ti Classified. Khủng của khủng trong dòng gamer đại chúng của Nvidia GTX 780 Ti. Cái gì cũng đẹp, mỗi tội VRAM 3GB là quá hẻo cho các ma trận điểm lớn một chút trong các mạng neuron lớn, còn nếu chỉ dùng video game thì đến giờ vẫn đang rất ổn áp rồi.

Nói chung muốn siết cũng phải biết điều tiết. Nhìn vào đây thì thấy cơ bản Geforce và Quadro không khác nhau mấy, còn so với Tesla thì chắc chỉ để cho mấy bố làm hoá dầu với cả mô phỏng phản ứng hạt nhân nhể. Chú ý tuyệt đối phải hiểu rõ (sâu :D) mình cần gì để chọn GPU cho phù hợp nhé.

Khả năng tính toán của 1 CPU/GPU được đo bằng đơn vị floating-point operations per second (FLOPS) – khả năng tính toán dấu chấm động trong 1 giây trong single precision(SP). SP là 1 dạng con số được định nghĩa = 32 bit.
Ở trên thì có thêm thuật ngữ double precision (DP), tức là con số được định dạng 64 bit. Tùy thuộc vào cấu tạo của Card mà 2 card chung GPU có thể giống single precision nhưng khác double precision (ví dụ K40 và 780 Ti là 2 con GPU giống nhau nhưng chỉ số DP lại khác nhau). Chắc cả CHIP và Driver ở Tesla mới được mở hết giới hạn.

Với ưu điểm tuyệt đối về giá, GeForce là lựa chọn không phải bàn cãi. Câu hỏi bây giờ là dùng 1 GPU hay nhiều GPU. Lưu ý Các trò SLI hay CrossFire là vô nghĩa trong DL và Linux vì thực ra để giao tiếp dataset giữa các card trong DL, chúng quá chậm, chỉ có thể PCI-E 3.0 mới đủ dùng. Nếu muốn mò mẫm học nhiều và tự tin về khả năng đồng bộ thì cứ mua vài con GPU (max là 4 cho đủ Quad SLI [dù chả liên quan mấy] với lại cũng gần như là max số khe PCI-e các mobo thông dụng có thể chứa được các GPU đúp này) để thử. Còn không rủng rỉnh lắm, cứ dồn tiền đập vào con mạnh nhất có thể trong dòng phổ thông (khi viết bài này là con GTX Titan X 12GB dòng Maxwell đấy)

Suy cho cùng là tính toán song song nên tổng hiệu suất mấy card rẻ thì có thể cao hơn 1 card mạnh thật. Tuy nhiên, việc đồng bộ hóa giữa 2 GPU thường không tốt và khá khó khăn cho coding (đôi chỗ là chưa thể như chia sẻ bộ nhớ video với nhau) nên sức mạnh không tăng theo phép cộng card được. Về lâu dài, thì cũng hết đường/hết khe để mà nâng cấp. Nếu chỉ nghịch ngợm tý trong Neural Network nhỏ ,thật lòng bạn nên vét túi vào con GPU mạnh nhất có thể. Nhỏ quá, việc đồng bộ là overhead quá sức tải của đầu óc, để tiếp thu cái khác có lợi hơn.
Nếu nghịch lâu dài với network khủng hơn như Convolutional Neural Network (CNN) thì có thể tối ưu hoá hiệu năng Price/Performance. Hiện tại CNN hỗ trợ tối đa lên đến 4 gpu trong 1 thùng nhưng sau này, khi mà hệ CPU Pascal của NVIDIA ra đời thì số lượng GPU trong 1 máy sẽ tăng cao hơn nhiều…

 Tạm thời xem mẩu video timelapse chiếc HPC được lắp lên thế nào cho đỡ chán mắt cái đã nhỉ? Ở phần sau tôi sẽ nói kĩ hơn về các vi kiến trúc cơ bản của Nvidia và lựa chọn của mình.


Tôi dựng máy tính HPC thế nào? Big data – Machine Learning – Deep Learning (P1)