Xây dựng hệ thống Bigdata-Machine learning - siêu máy tính

Bài viết dựa trên kiến thức và học lực cá nhân, các bạn tích cực đóng góp giúp mình

I. Đôi lời

bản thân mình nhận thấy Voz hiện giờ toàn trẻ trâu search google rồi vào tư vấn bậy hơi bị nhiều. Cũng như nhu cầu về xây dựng phần cứng cho siêu tính toán ngày càng nhiều hơn nữa. Tuy nhiên có khá ít người thông thạo cả 2 lĩnh vực về phần mềm và phần cứng và không hề có tài liệu xây dựng phần cứng dành cho những ngành siêu tính toán (machine learning – ngân hàng, uber, facebook etc…) Và mớ kiến thức về machine learning này vừa rộng rãi vừa chuyên sâu, mình hy vọng sẽ là hành trang cho các nhà google-er trên con đường bình định thiên hạ bằng bàn phím.







Mobile , laptop, tablet… được gọi chung là thiêt bị di động cá nhân. Những thiết bị cá nhân càng ngày càng nhỏ, gọn hơn và càng ngày càng mạnh mẽ hơn, phục vụ mọi mục đích sống của con người. Tuy nhiên những thiết bị di động cá nhân, cho dù có sử dụng chip 64 bit hay 8 gb đi chăng nữa cũng khó long đáp ứng hết toàn bộ những nhu cầu điện toán của con người. Và những thiết bị di động cá nhân càng ngày càng rẻ thì càng thúc đẩy nhu cầu về điện toán cao hơn hết. Từ đó sinh ra 1 xu thế điện toán mới phục vụ cho 1 khối lượng lớn người sử dụng thiết bị cá nhân, điện toán đám mây.



Điện toán đám mây – cloud computing, ngoài khả năng lưu trữ ra, thì nó còn phải đảm đương đượcoa1 lượng tính toán khổng lồ trong cùng 1 thời điểm, mà những tính toán đó thay đổi theo từng ngày từng giờ (thí dụ như dự đoán giá vé máy bay trong tương lai). Nên chúng ta không thể lập trình nó theo cách bình thường, mà phải lập trình những thuật toán nhất định. Và tự thuật toán đó sẽ lập trình bản thân nó và tự thay đổi bản thân nó. Tất cả những thuật toán đó gọi chung là Machine learning. Đôi khi cũng có người gọi là big data nhưng ngử nghĩa nó mông lung không chính xác lắm.
 

"Một chương trình máy tính CT được xem là học cách thực thi một lớp nhiệm vụ NV thông qua trải nghiệm KN, đối với thang đo năng lực NL nếu như dùng NL ta đo thấy năng lực thực thi của chương trình có tiến bộ sau khi trải qua KN" (máy đã học)

Ứng dụng đầu tiên của machine learning là 1 phần mềm tự động dạy bản thân cách đánh cờ vua năm 1959. Sauk hi tự chơi cờ vua 1000 ván, nó đủ có kinh nghiệm để đánh bại hầu hết mọi đối thủ. 


Hiện nay, hầu hết mọi nhu cầu điện toán quanh ta đều xoay quanh bởi machine learning, ví dụ như:

/-Phát hiện gian lận tại ngân hàng (ai đọc cuốn quốc gia khởi nghiệp chắc sẽ nhớ công nghệ này – liên quan tới Paypal)

/-Xác định được dữ liệu khách hàng nhằm tối ưu hóa quảng cáo (năm 2008, 1 ông bố kiện siêu thị Target ở Mỹ liên tục gửi coupon, phiếu giảm giá và khuyến mãi đồ dành cho phụ nữ mang thai về cho con gái đang học trung học của ông ta. 2 tháng sau ông bố siêu thị quay lại xin lỗi vì con gái ông ta có thai thật)

/-Dự đoán cổ phiếu, giá cả thị trường 

/-Bảo hiểm giá cả (Google gần đây đã tài trợ cho một dự án startup giúp các công ty bảo hiểm thảm họa tự nhiên xác định giá dựa trên mô hình thời tiết do sự nóng lên toàn cầu)

/-Xác định Gen co người nhằm dự đoán ung thư 

/-Dự đoán giá nhà cho các công ty bất động sản (ai có hứng thú mình tặng source cái này)

/-Đọc hiểu 1 câu văn bất kỳ 

/-Nhận biếtk huôn mặt (Facebook)

/-Xe tự lái (GoogleX, NVIDIA driverless)

/-Phần mềm anti virus

/-Chuẩn đoán bảo dưỡng 

/-Dự đoán giá vé máy bay 

/-Xác định cử tri trong các đợt bầu cử (Obama được mệnh danh là tổng thống số hóa – cyber president, sau khi sử dụng hình thức machine learning và big data để đưa ra những quyết định làm hài long cử tri. Ngoài ra Obama còn đưa ra kế hoạch xây dựng hệ thống siêu máy tính exaflops)

/-Phát triển các loại thuốc dược phẩm (hóa học tổ hợp)

/-Tiên đoán thị hiếu, xu hướng âm nhạc (Pandora)

/-Tiên đoán thị hiếu, xu hướng phim, chương trình (Netflix)

/-Công cụ tìm kiếm (Google)

/-Dự đoán sở thích (Facebook)

/-Dự đoán cuốn sách khác bạn có thể thích (Amazon)

 

II. Nền tảng tính toán AMD hay NVIDIA hay Intel

Nói về tính toán, nhiều người sẽ lầm tưởng rằng đó là 1 hệ thống có chứa 1 con cpu cực kỳ mạnh, hoặc là cpu có 64 thread hoặc là càng mắc càng tốt… Sai lầm này dẫn đến sự lãng phí trong ngân sách và thậm chí không tối ưu phần cứng được công việc của mình. Đó là lý do nhiều tập đoàn lớn sử dụng ARM/chip điện thoại để làm nền tảng phần cứng cho Machine Learning. 

Bonus information: với 1 hệ thống cày bitcoin 8 con FuryX thì khả năng bạn đã đứng top siêu máy tính năm 2005.

Việc khó khan nhất khi bắt đầu làm machine learning là chọn nền tảng. Mặc định chúng ta sẽ hiểu machine learning sử dụng tính toán song song(giải thích ra hơi dài dòng nhưng tính toán song song là tối ưu nhất rồi). Chúng ta sẽ có 1 vài hướng đi chính như sau:

OpenCL: Đứng đầu là AMD/ATI vga card. 1 lời khuyên là khi đã cứng cựa trong ngành và có rất rất nhiều thời gian thì nên chọn OpenCL. Ưu điểm: giao diện dễ hiểu, phần cứng đa dạng (CPU, GPU, FPGA…) Khuyết điểm: bạn sẽ không có sự hỗ trợ từ cộng đồng do AMD quá chậm chân trong việc PR nền tảng OPENCL



CUDA: đứng đầu và duy nhất là NVIDIA. Ưu điểm là có khá nhiều tại liệu và open source khủng từ các Lab hàng đầu thế giới như MIT, Stanford university etc… Khuyết điểm là phần cứng cũng không rẻ cho mấy. 



Xeon Phi: là 1 tập hợp trá hình các con CPU chạy trên khe PCI express. Sử dụng ngôn ngữ lập trình X86/64 như bình thường nên ưu điểm là áp dụng nhanh, gọn lẹ. Khuyết điểm là khá mắc và ko bán cho người dung bt.



Và với những ưu khuyết điểm như trên, không lạ gì mà NVIDIA card được giới tính toán ưu tiên hơn cả. Bạn không cần phải phát minh lại cái bánh xe.

III. Chọn VGA

a. Chọn GPU: đa GPU hay 1 con GPU mạnh nhất có thể?

Câu hỏi trên là 1 câu hỏi kinh điển khi làm machine learning. Nếu bạn tự tin rằng bạn có khả năng đồng bộ hóa tốt, và sau này không có ý định nâng cấp, thì hãy làm theo túi tiền. Còn không thì kinh nghiệm bản thân mình là cứ đập VGA mạnh nhất có thể

Nhiều người lầm tưởng hễ cứ làm việc là đi với Quadro. Điều này chỉ đúng khi bạn làm việc thiết kế đồ họa 3D do Driver của Quadro tối ưu cho việc dựng hình đổ da các kiểu. Hơn nữa Những con chip của Quadro là những con chip “hoàn hảo” nhất, nên base clock cùng 1 con chip thì quadro cao giá hơn. 



Tesla mặc khác, ngoài việc ko có cổng xuất hình thì điểm khác biệt rõ ràng nhất là khả năng tính toán DP cao hơn và Ram nhiều hơn. (về vụ khả năng tính toán DP cao hơn mình nghĩ là nó giảm DP của mấy dòng khác xuống, Bitch NVIDIA). Tuy nhiên bạn cũng không cần quan tâm tới DP nhiều hay ít trừ khi bạn làm kỹ sư cơ khí, khí động học hay địa chất học. 



Geforce là card chơi game. Ngoài ra khả năng tính toán SP của nó ko khác gì so với 2 dòng trên. Ưu điểm mạnh nhất của dòng Geforce là rẻ.


Nhiều người sẽ hỏi nếu budget cho phép thì người ta sẽ chọn nhiều card với tổng năng suất cao hơn hay mua 1 card mạnh nhất có thể? Bởi vì suy cho cùng 2 card hay 3, 4 card cũng là tính toán song song. Tuy nhiên, 1 vấn đề hệ trọng là việc đồng bộ hóa giữa 2 GPU không tốt, sức mạnh ko x2 lên. Song song đó thì vấn đề nâng cấp sẽ trở nên khó khăn hơn trong giai đoạn lâu dài. 

Nếu hướng đi của bạn là Neural Network nhỏ , lời khuyên là nên đập vào con GPU mạnh nhất mà túi tiền có thể. 1 Network quá nhỏ rất khó để đồng bộ.

Nếu hướng đi Convoliutional Neural Network (CNN) thì có thể optimize giữa total performance/price. Hiện tại CNN hỗ trợ max 4 gpu trong 1 máy tuy nhiên trong tương lai 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. Các bạn có thể tham khảo thêm https://github.com/akrizhevsky/cuda-convnet2

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). (Single precision là 1 dạng con số được định nghĩa = 32 bit).

Đôi khi chúng ta sẽ gặp 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ụ K20 và Titan là 2 con GPU giống nhau nhưng chỉ số DP lại khác nhau. Có thể NVIDIA disable bớt DP trên Titan đi, bitch NVIDIA).

Bonus: các dòng chip của GPU

Dòng chip Fermi, tức dòng 4xx và 5xx, 1 cuda core có thể đảm nhiệm 2 lần tính FP32 /clock. Tuy nhiên nó cũng có thể đảm nhiệm luôn 1 lần tính FP64/clock. NVIDIA nhồi nhét cả 2 vào trong 1 cuda core nên đặc sản của GPU 4xx và 5xx là chiên trứng 



Dòng chip Kepler, tức dòng 6xx và 7xx, 1 Cuda core chỉ có khả năng tính toán 2 FP32/clock và ko có khả năng tính tóan FP64. Nên NVIDIA mới thêm vào nhân FP64 bên ngoài cuda core (màu cam). Cuda core lúc này ko phải mang thêm phần dư thừa nên hiệu năng lẫn độ tiêu hao điện giảm đáng kể cũng như nhiệt độ.



đây là titan black, cứ 3 cuda core thì sẽ có 1 FP64 core. Đối với mấy dòng khác trong hệ Kepler thì cứ 24 cuda core thì sẽ có 1 FP64 nên hiệu năng tính toán FP64 của black = 1/3 FP32. Tuy nhiên có 1 điều đáng mừng là Card Titan và 780 nonti cũng có hệ số 1/3 nhưng trong driver đã disable nó đi. Chính 2 con này mới là con bị khóa. Chúng ta có thể unlock = cách vào NVIDIA control panel -> Manage 3d setting -> . Trong Global setting, enable dòng CUDA - Double Precision.

Đối với dòng chip Maxwell, kiến trúc tương tự như Kepler nhưng NVIDIA mạnh tay bỏ luôn FP64, chỉ còn cuda core. Việc xử lý FP64 được đẩy sang 1 core khác là texture mapping unit (TMU). Mà titanx chỉ có 192 core TMU nên hiệu năng FP64 sẽ là 192 gigaFlops




Ban đầu dòng 680 có thể yếu hơn 580 do kiến trúc thay đổi khiến cho thuật toán tính toán chưa cập nhật kịp thời.

b.Ram bao nhiêu

Có 1 hạn chế nữa khi sử dụng đa GPU là Ram nó ko tăng theo số lượng Card. 2 con 4GB ram ko tăng thành 8 GB ram.

Tùy thuộc vào cách tiếp cận và khối lượng training set mà ta sẽ dùng ram nhiều hay ít. Có 1 công thức tính chung như sau: 

- 32 bit single precision = 4 byte
- Momentum = 3
Với 1 network:
- Batchsize = 128
- Network = 9000*4000*4000*24 (Input 9000 và 2 hidden layer 4000)

Công thức tính ram =
{4 * 3 * [(9000*4000+4000*4000+4000*24) + 128*(9000+4000+4000+24)}/(1024^3)= 0.606571 GB. 

Tức là 1 cái project như thế thì chỉ cần VGA có 1 hoặc 2GB ram là đủ (đây là 1 network tương đối nhỏ)

Trong thời điểm hiện tại, đa số khi làm việc với machine learning, chủ yếu là về lĩnh vực phân tích hình ảnh, người ta sử dụng network ImageNet cũng ko xài quá 6GB ram cho từng lĩnh vực đặc thù, đối với network nhận dạng chữ viết, MNIST,cũng không xài quá 4GB ram. TitanX với 12GB ram có thể đương đầu với những project 4 năm nữa theo đà phát triển như hiện tại.

c.VẬY, ỨNG CỬ VIÊN NGON NHẤT:



 

Nếu dư dả tiền bạc:dĩ nhiên là TitanX, với GPU mạnh mẽ và lượng ram dồi dào.
Vừa đủ xài: là gtx 980 và 980 Ti
Con nhà nghèo: hãy lùng những con top flagship có 4GB như 680, 780

Hệ số sức mạnh tương quan như sau:

GTX Titan X = 109% GTX 980 Ti (6GB ram, giá tầm 640 so với titanx là 1000, quá ngon)

GTX Titan X = 136% GTX 980 (4gb ram, có vẻ thiếu ram nếu làm ImageNet, giá tầm 480)

GTX Titan X = 140% GTX 970 (3.5GB + 0.5, thọt, dùng để research thì ngon)

GTX Titan X = 150% GTX Titan (Titan vẫn là 1 con card khá hấp dẫn khi mà có lượng ram tới 6GB, giá thành 2nd thấp hơn 2 flag ship 980 Ti Titanx, $469.99, giá mới 1000, chả hiểu sao)

GTX Titan X = 160% GTX 580 (EOL, chỉ còn hàng 2nd, 3GB ram, hơi bị out date ko còn được support deep learning mới)

GTX Titan X = 165% GTX 680 (con số này đã thay đổi do bản thân cách tiếp cận deep learning đã update code mới, nhanh hơn rất nhiều)

GTX titan X = 167% GTX 960 (ehhhhh, dành cho sinh viên phòng lab)

GTX titan X = 165% AWS GPU instance g2.2 và 2.8 (Amazon Web Services (AWS) - Cloud Computing Services: đây là 1 ứng cử viên đáng quang tâm. Bạn sẽ thuê dịch vụ Computing của Amazon trong khi đợi tài trợ chẳng hạn hay đợi GPU Pascal ra mắt, với giá cả vừa phải $0.65/h)

1 điều đáng lưu ý khi sử dụng dịch vụ AWS GPU instance của amazon là tuy g2.8 có 4 gpu tuy nhiên do băng thông cùi chúi nên hiệu năng ko lớn hơn g2.2 bao nhiêu

Lưu ý 2: như chúng ta đã biết, GTX 970 không hoàn toàn mang 4GB ram mà là 3.5+5. Khi 1 trainingset sử dụng hết 3.5 GB đầu tiên thì performance sẽ rớt thê thảm.

1 số card có cả 2 phiên bản Ram, 1 phiên bản chính thống và 1 phiên bản gấp đôi. Ví dụ như GTX 580 1.5GB và 2GB

Thực sự ra nếu bạn xây dựng hệ thống cho doanh nghiệp nên chọn cấu hình TitanX vì nó mang tính ổn định lâu dài. Pascal khi ra mắt còn phải đợi 1 thời gian ổn định các thuật toán.

Update 23/8: sau khi nâng cấp code mới thì GTX Titan nhanh hơn gtx 580 10 lần (test bằng thuật toán nhận diện chữ viết tay MNIST)



Tại sao ko có quadro hay Tesla trong list? Quadro sinh ra dành cho nhu cầu đồ họa cấp cao. Còn Tesla lại mạnh về tính toán chi tiết 64 bit. Tức là nếu nghiên cứu của bạn cấn độ chính xác lên đến hàng chục, hàng trăm con số 0 sau dấu phẩy thì hãy nghĩ đến Tesla. Mà tesla thì tiền nhiều thì nó càng mạnh ko phải đắn đo.

Trong tương lai gần, năm 2016, NVIDIA quảng cáo GPU Pascal sẽ khắc phục yếu điểm các dòng hiện tại với các tính năng như 

Tổ hợp toán 16 bit và 32 bit

Ram HBM cho băng thông 6x hiện tại 

Lượng ram tăng tới 32 GB

Công nghệ truyền dữ liệu NVLINK giữa các VGA với nhau cho băng thông nhanh gấp 5 lần băng thông PCIe Gen3 x16 (80->200 GB/s)



 

IV. CPU và mainboard

CPU và mainboard là 2 thành phần tối quan trọng của 1 máy tính, tựa như đầu não trung tâm và xương sống của 1 cơ thể



Bởi vì giới hạn duy nhất của Machine learning chính là băng thông của thiết bị nên khi chọn cpu hay mainboard, hãy chọn nền tảng có băng thông PCI Express cao nhất có thể. Băng thông PCI EX của Intel nằm trong CPU còn AMD nằm trong chip cầu bắc. Ở đây mình sẽ sử dụng nền tảng X99 socket 2011 V3 của Intel vì nó hỗ trợ nhiều khe PCI EXpress và Băng thông tổng của 1 CPU là 40 Lane PCI express 3.0



Mỗi 1 lane của băng thông 3.0 gần như gấp đôi PCI express 2.0 (mà chipset của AMD cũng chỉ hỗ trợ maximum 2.0)

DỰa vào hình trên thì đối với 1 mainboard có 4 khe cắm GPU, chúng ta sẽ có các trường hợp sau

Trong machine learning, mỗi core CPU sẽ điều khiển 1 GPU. Vì thế nên tối thiểu số core cpu (core thực) luôn lớn hơn hoặc bằng số cpu

Khi training data bằng 1 GPU, bạn sẽ để ý thấy rằng có 1 thread luôn luôn chạy và 1 core/thread lâu lâu sẽ nhảy vọt từ - -> 100%. Các ứng dụng deep learning đa số đều sử dụng single core/thread. Tuy nhiên lâu lâu ứng dụng sẽ gọi những function không đồng bộ, core hoặc thread thứ 2 sẽ được sử dụng. Nếu bạn sử dụng nhiều GPU trên 1 máy, 4 cái chẳng hạn, thì 1 con CPU intel 4 core 8 thread hoặc 1 con cpu 6 core là quá đủ cho 1 cuộc tình (các function không đồng bộ ko chạy đồng thời nên 2 core thêm là đủ).

Hạy chọn Haswell socket 2011 V3! Tại sao? Vấn đề nằm ở chỗ, như ban đầu đã nói, deep learning do khả năng gpu hiện tại rất mạnh nên hạn chế duy nhất của deep learning hiện tài là băng thông. Vấn đề nghẽn băng thông chỉ xảy ra khi bạn chạy cấu hình đa GPU. 1 hệ thống sử dụng cpu Haswell sẽ cung cấp cho bạn tới 40 lanes PCI express 3.0

Trong trường hợp này, ứng cử viên ngon nhất là Intel Xeon E5-2603 V3 với 6 core, 85 W với giá bán $205 tại SuperBizz với 40 lane PCI EX 3.0. 40 lane đó là gì?

Mỗi 1 PCI 16x nó sẽ có tốc độ 16x, bạn cắm 2 card vào, băng thông 2 card lúc này sẽ là 32 lane. Tức là mỗi 1 card sẽ có băng thông 15.3754 gigabyte/s



Khi cắm card thứ 3 vào, nó sẽ không còn đủ băng thông vì 16x3 sẽ là 48? Không, nó sẽ auto cấu hình lại thành 3 khe lần lượt là 16x, 16x, 8x. với băng thông lần lượt là 15.3754 - 15.3754 - 7.6877 gigabyte/s



Và như thế 4 card sẽ là 16x, 8x, 8x, 8x. Thậm chí có 1 số CPU chỉ có 32 lanes, hoặc như skylake mới ra chỉ có 20+16 lane. Hiệu năng sẽ giảm kha khá khi mà băng thông bị bóp như thế.




Bạn đã nghe qua công nghệ PLX Pex 8747?

Asus và Asrock quảng cáo rằng họ có công nghệ từ PLX sử dụng trên những main board X99(thậm chí trên z79 cũng có), sử dụng 2 chip bắc cầu pex 8747, có thể đạt được băng thông 4x 16x PCI Ex 3.0, ngay cả khi con cpu gắn trên main chỉ có 28 lane. Hiện tại ko có manual diagram nên ko biết 2 chip đó nó kết nối với lane nào, nhưng cách hoạt động của nó đơn giản là tạm thời disconnect 1 card đang trong quá trình xử lý để tăng băng thông card đang trong quá trình gửi nhận data. 



Đối với game thì nó tăng hiệu năng kha khá cho những dàn SLI hay Crossfire nhưng đối với deep learning thì không. Bởi vì Deep learning cần 1 lượt xử lý hoàn chỉnh trước khi qua vấn đề khác, trong khi chip PEX sẽ tạm dừng băng thông của 1 hoặc 2 trong 4 GPU lại để tăng băng thông cho những con còn lại khiến cho việc tính toán bị delay. Mà thật ra Khi băng thông giảm 1 nửa thì hiệu năng chỉ giảm tầm 20-> 40%, không phải bị giảm 1 nửa. Nhưng nếu chặn băng thông thì hiệu năng sẽ thực sự giảm 87.5% -> 75% (4x, 8x).

Ngoài Asus và ASrock ra thì EVGA cũng có công nghệ Pex trên mainboard Z77 FTW 



Sử dụng mainboard nhiều socket CPU?

1 cách khắc phục tình trạng thiếu băng thông khác là sử dụng mainboard dual socket. Ứng cử viên sáng giá nhất là Motherboard: X10DRG-Q hỗ trợ 4 khe full 16x, mỗi cpu sẽ quản lý 32 lane. 8x thừa của CPU 2, 4x sẽ dành cho các chip lan 10 gigabit và 4x extra, nhưng 4x này sẽ bị card che mất nếu ko sử dụng riser. 8x thừa của CPU số 2 bằm trên cùng, sẽ ko bị card che. Khe này rất quan trọng, dùng để gắn card Mellanox ConnectX-4 Lx EN với công nghệ GPUDirect RDMA. Sẽ nói thêm sau.



Cách tiếp cận dual socket có 1 nhược điểm là đường đi của data sẽ quá phức tạp cho việc viết điều khiển. Hơn nữa đường kết nối giữa 2 cpu, QPI – Intel quick path interconnect, băng thông cho dù có lớn cũng không đảm bảo được sẽ không có delay, kiểu giống như cao tốc long thành dầu giây có trạm thu phí. Tuy nhiên tất cả đều chỉ là lý thuyết, không biết thực tế nó sẽ nhanh hơn hay chậm hơn ???

Sử dụng hệ thống xử lý chỉ có CPU?

Bạn hãy tưởng tượng giống như 1 đất nước nọ, họ không có khả năng xây dựng đường cao tốc 16 làn đường giữa các thành phố lớn, nên họ xây nhiều thành phố nhỏ, kết nối với nhau bằng những đường quốc lộ chỉ có 4 làn đường.

Đối với hệ thống cần sức mạnh hơn 4 gpu, chúng ta sẽ xây dựng các cluster. Cluster thực chất là nhiều PC dc kết nối với nhau thông qua cổng Gigabit. Cổng gigabit của main nói trên và tất cả các main hiện nay đều chỉ có 10 gigabit, tức là 1.25 GB/s, chỉ bằng 1.3 lần PCI Ex 3.0 x1. Để cho dễ hiểu, giả sử ta có 2 cpu: cpu1 và cpu 2, 8 con gpu từ gpu1…gpu8. Thì kết nối nó sẽ như thế này



Kết nối màu đỏ là kết nối mạng giữa 2 máy với nhau. Sơ đồ trên dc gọi là topology, thực tế nó còn phức tạp hơn rất nhiều lần vì phải qua cache của CPU và ram hệ thống etc…

Card mạng ở đây là chuẩn Infiniband có thể cho through put tới 4 gigabyte/s.

Các hệ thống siêu máy tính cũ, họ sử dụng 4 CPU Opteron với nhau để đảm bảo băng thông tương tác với nhau. Thậm kiến trúc ARM cũng dc sử dụng vì nhiệt độ và khả năng tiêu thụ điện thấp. Mô hình họ thường sử dụng là 1 rack mainboard chứa 4 con Opteron kết nối gigabit với nhau.





GPUDirect RDMA

Suy cho cùng thì kết nối gigabit (1.5 gb/s) hoặc infiniband 4 gigabyte/s cho dù có nhanh tuy nhiên vấn để vẫn sẽ có delay giữa CPU ram và GPU với nhau. Để khắc phục tình trạng thiếu băng thông này, NVIDIA cùng với Mellanox đưa ra giải pháp GPUDirect RDMA . Dữ liệu giữa các VGA với nhau sẽ dc truyền thẳng tới VGA mà không cần thông qua CPU. Ngoài ra, Card mạng Mellanox sẽ có tốc độ 6.25 GB/s, đảm bảo băng thông gần tới x8 (7.877 GB/s)



V. Ram hệ thống

V. Ram hệ thống

Băng thông

Băng thông của ram được tính bằng công thức như sau

Bandwidth GB/s = Ram clock Ghz * số channel * 64bit / 8 bit

Ram clock Ghz của DDR3 thường là 1600 và DDR4 là 2400 Mhz (1.6 và 2.4 Ghz) 

Đối với các socket 775, 1155, 1156, 1150, 1151 thì số channel thường là 2

Các dòng bán server như 2011 thì có 4 channel và 1366 th2i có 3 channel

64 bit là số bit hoạt động của cpu và chia cho 8bit để tính ra byte



Giả sử 1 thanh ram DDR 4 chạy với tốc độ 2400 Mhz sẽ có bang thông là 76.8 Gigabyte/s. Tức là cứ mỗi giây thì ram sẽ truyền tải được 76.8 Gigabyte dữ liệu qua lại, cao hơn gấp 4, 5 lần so vớibăng thông của PCIe gen3 x16.

CAS ram

Cas ram là độ trễ khi ghi dữ liệu. Hãy tưởng tượng Bandwidth giống như 1 chiếc tàu hỏa chạy với tốc độ 76.8 km/s, nhưng 2 tàu sẽ rời bến cách nhau 11.25 nano giây (Cas 9). Cas chỉ ảnh hưởng duy nhất khi dữ liệu của bạn cực kỳ mảnh. Giữa cas 11 và cas 9 tốc độ khác nhau chỉ 15%

Để biết được độ trễ tính theo giây, ta lấy 1000/clock mhz * cas

1 cây ram 1600 cas 9 sẽ trễ 100/1600*9 = 11.25 nano second

Trong những ứng dụng bt, CAS chỉ có tác dụng TDTT là chính, không đóng vai trò lớn vì các nhà lập trình đã tính toán tối ưu băng thông để đẩy nhanh tốc độ (dữ liệu lưu trự lớn hơn, ít phân mảnh hơn).

DMA (Direct memory access)

AMD có công nghệ tương đương là AMD DirectGMA.

Tuy nhiên vấn đề là cuộc nói chuyện giữa Ram và VGA thông qua 1 cổng DMA (Direct memory access) và nó chỉ có 18.75GB/s. Đối với DDR3 1600Mhz thì bandwidth của DMA sẽ là 12.5 gigabyte/s. Tức là sẽ có sự nghẽn bang thông tại phần DMA. Tuy nhiên, cách lập trình của bạn sẽ giải quyết vấn đề này:

Khi dữ liệu đợt đầu tiên chạy vào GPU xử lý, trong lúc đợi gpu thì bạn có thể load toàn bộ dữ liệu cho đợt 2 lên vga ram và dữ liệu đợt 3 lên Ram hệ thống đợi ở đó. Xem them cách làm: http://www.cs.cmu.edu/~muli/file/minibatch_sgd.pdf


Dung lượng ram

Ram máy tính theo lời khuyên của các chiên da ít nhất nên gấp đôi số ram của 1 gpu. Nếu dùng 1 đến 4 Titanx thì số ram của máy nên là 24 (hoặc 32). Dung lượng ram càng lớn thì dữ liệu load dự trữ càng dc nhiều.