.. raw:: html
.. _sec_buy_gpu:
Lựa chọn Máy chủ & GPU
======================
.. raw:: html
Việc huấn luyện học sâu thông thường đòi hỏi một lượng lớn tài nguyên
tính toán. Ở thời điểm hiện tại, GPU là công cụ tăng tốc phần cứng tiết
kiệm chi phí nhất cho việc học sâu. Cụ thể, so với CPU, GPU rẻ hơn và
thường cung cấp hiệu suất cao hơn hàng chục lần. Hơn nữa, một máy chủ có
thể hỗ trợ đa GPU, tới 8 GPU với các máy chủ cao cấp. Số GPU điển hình
là 4 cho một máy trạm kỹ thuật, vì vấn đề tỏa nhiệt, làm mát và lượng
điện tiêu thụ sẽ tăng vọt, vượt quá khả năng một văn phòng có thể cung
cấp. Để triển khai trên số lượng lớn hơn, điện toán đám mây, chẳng hạn
như các máy ảo `P3 `__ và
`G4 `__
của Amazon là một giải pháp thực tế hơn nhiều.
.. raw:: html
Lựa chọn Máy chủ
----------------
.. raw:: html
Thông thường không cần mua các dòng CPU cao cấp với nhiều luồng vì phần
lớn việc tính toán diễn ra trên GPU. Đồng nghĩa với việc, với Khóa trình
thông dịch toàn cục (GIL) trong Python, hiệu suất đơn luồng của CPU có
thể là vấn đề trong các tình huống mà chúng ta có 4-8 GPU. Điều này cho
thấy rằng các CPU với số lượng nhân nhỏ hơn nhưng có xung nhịp cao hơn
có thể là sự lựa chọn ít tốn kém. Chẳng hạn khi lựa chọn giữa CPU 6-nhân
4 GHz và 8-nhân 3.5 GHz, thì lựa chọn thứ nhất sẽ được ưu tiên hơn, mặc
dù tốc độ kết hợp lại có thể thấp hơn. Một lưu ý quan trọng là các GPU
sử dụng rất nhiều năng lượng và do đó tỏa nhiệt rất nhiều, đòi hỏi khả
năng làm mát tốt và một khung máy đủ lớn để sử dụng các GPU đó. Bạn đọc
nên theo sát các nguyên tắc bên dưới đây nếu có thể khi thiết kế máy
trạm cho học sâu:
.. raw:: html
1. **Bộ Nguồn Cấp Điện**. GPU sử dụng một lượng điện năng đáng kể. Mỗi
GPU có thể cần nguồn cấp lên đến 350W (kiểm tra *công suất đỉnh* của
card đồ họa thay vì công suất trung bình, vì mã nguồn được tối ưu có
thể ngốn nhiều năng lượng). Nếu nguồn điện của bạn không đáp ứng được
nhu cầu, hệ thống sẽ trở nên không ổn định.
2. **Kích thước khung chứa**. GPU có kích thước lớn và các đầu nối nguồn
phụ trợ thường cần thêm không gian. Thêm nữa, khung máy lớn giúp dễ
làm mát hơn.
3. **Làm mát GPU**. Nếu bạn có số lượng lớn GPU, bạn có thể muốn đầu tư
hệ thống tản nhiệt nước. Ngoài ra, có thể sử dụng các *thiết kế tham
khảo* ngay cả khi chúng có số quạt làm mát ít hơn, vì chúng đủ mỏng
để cho phép thông gió giữa các thiết bị. Nếu bạn mua một GPU có nhiều
quạt, nó có thể quá dày để nhận đủ không khí khi lắp đặt nhiều GPU và
bạn sẽ gặp phải tình trạng khó tản nhiệt.
4. **Khe cắm PCIe**. Việc chuyển dữ liệu đến và đi từ GPU (và trao đổi
giữa các GPU) đòi hỏi nhiều băng thông. Chúng tôi đề xuất khe cắm
PCIe 3.0 với 16 làn. Nếu bạn lắp nhiều GPU, hãy đảm bảo là bạn đọc kỹ
mô tả bo mạch chủ để chắc chắn băng thông 16x đó vẫn khả dụng khi
nhiều GPU được sử dụng cùng lúc và tốc độ PCIe là 3.0 thay vì PCIe
cho các khe cắm bổ sung. Một số bo mạch chủ sẽ hạ xuống băng thông 8x
hoặc thậm chí 4x khi nhiều GPU được cài đặt. Điều này một phần là do
số lượng làn PCIe mà CPU đó cung cấp.
.. raw:: html
Tóm lại, dưới đây là một số khuyến nghị để bạn xây dựng một máy chủ học
sâu:
.. raw:: html
- **Người mới bắt đầu**. Một GPU cấp thấp với mức tiêu thụ điện năng
thấp (GPU dành cho chơi game giá rẻ phù hợp cho việc sử dụng học sâu
150-200W). Nếu may mắn, máy tính hiện tại của bạn đã có sẵn một GPU
như trên.
- **1 GPU**. Một CPU cấp thấp với 4 nhân sẽ là quá đủ và hầu hết các bo
mạch chủ đều đáp ứng được. Hãy nhắm đến ít nhất 32 GB DRAM và đầu tư
một ổ SSD để truy cập dữ liệu cục bộ. Nên sử dụng nguồn cung cấp 600W
là đủ. Mua GPU có nhiều quạt.
- **2 GPU**. Một CPU cấp thấp với 4-6 nhân là đủ. Hãy nhắm đến 64 GB
DRAM và đầu tư vào một ổ SSD. Bạn sẽ cần nguồn tầm 1000W cho hai GPU
cao cấp. Đối với bo mạch chủ, hãy đảm bảo rằng chúng có *hai* khe cắm
PCIe 3.0 x16. Nếu có thể, hãy mua một bo mạch chủ có hai khoảng trống
(khoảng cách 60mm) giữa các khe PCIe 3.0 x16 để có thêm không khí.
Trong trường hợp này, hãy mua hai GPU có nhiều quạt.
- **4 GPU**. Đảm bảo rằng bạn mua một CPU có tốc độ luồng đơn tương đối
nhanh (cụ thể là tần số xung nhịp cao). Bạn có thể sẽ cần một CPU có
số lượng làn PCIe lớn hơn, chẳng hạn như một chip AMD Threadripper.
Bạn có thể sẽ cần bo mạch chủ tương đối đắt tiền để có 4 khe cắm PCIe
3.0 x16 vì chúng có thể cần PLX để ghép kênh các làn PCIe. Hãy mua
GPU có thiết kế tham khảo gốc vì nó hẹp hơn và cho phép không khí lưu
thông giữa các GPU. Bạn cần nguồn điện tầm 1600-2000W và ổ cắm trong
văn phòng của bạn có thể không hỗ trợ điều đó. Máy chủ này có thể sẽ
*gây tiếng ồn và tỏa nhiệt* nhiều. Bạn hẳn là không muốn đặt nó dưới
bàn làm việc của bạn. Khuyến nghị sử dụng 128 GB DRAM. Mua một ổ SSD
(1-2 TB NVMe) để lưu trữ cục bộ và một số ổ cứng theo cấu hình RAID
để lưu trữ dữ liệu của bạn.
- **8 GPU**. Bạn cần mua khung máy chủ đa GPU chuyên dụng với nhiều
nguồn điện dự phòng (chẳng hạn, 2 + 1 cho 1600W với mỗi bộ nguồn).
Điều này sẽ yêu cầu CPU máy chủ có khe cắm kép, 256 GB ECC DRAM, một
cạc mạng nhanh (khuyến nghị 10 GBE), và bạn sẽ cần kiểm tra liệu máy
chủ có hỗ trợ *hình dạng kích thước vật lý* của GPU hay không. Luồng
không khí và bố trí đi dây có sự khác biệt đáng kể giữa GPU tiêu dùng
và GPU máy chủ (cụ thể ở đây là RTX 2080 so với Tesla V100). Điều này
có nghĩa là bạn có thể không lắp đặt được GPU tiêu dùng vào máy chủ
do không đủ khoảng trống cho cáp nguồn hoặc thiếu dây nối phù hợp
(như một trong các đồng tác giả đã đau khổ khi phát hiện ra).
.. raw:: html
Lựa chọn GPU
------------
.. raw:: html
Hiện nay, AMD và NVIDIA là hai nhà sản xuất GPU chính. NVIDIA là tiên
phong trong tham gia lĩnh vực học sâu và cung cấp hỗ trợ tốt hơn cho các
framework học sâu thông qua CUDA. Do đó, phần lớn người mua chọn GPU của
NVIDIA.
.. raw:: html
NVIDIA cung cấp hai loại GPU, nhắm tới người dùng cá nhân (ví dụ như
dòng GTX và RTX) và người dùng doanh nghiệp (thông qua dòng Tesla của
họ). Hai loại GPU cung cấp khả năng tính toán tương đương nhau. Tuy
nhiên, GPU dành cho người dùng doanh nghiệp thường sử dụng tản nhiệt
cưỡng ép (thụ động), nhiều bộ nhớ, và bộ nhớ ECC (sửa sai - *error
correcting*). Những GPU này phù hợp hơn cho trung tâm dữ liệu và thường
có giá cao hơn 10 lần so với GPU tiêu dùng.
.. raw:: html
Nếu bạn là một công ty lớn với 100+ máy chủ, bạn nên cân nhắc dòng
NVIDIA Tesla hoặc thay thế bằng cách sử dụng máy chủ GPU trên đám mây.
Với các phòng nghiên cứu hay một công ty tầm trung với 10+ máy chủ, dòng
NVIDIA RTX có lẽ sẽ có hiệu quả chi phí tốt nhất. Bạn có thể mua máy chủ
cấu hình sẵn với khung chứa Supermicro hay Asus, có thể chứa hiệu quả
4-8 GPU.
.. raw:: html
Nhà cung cấp GPU thường ra mắt thế hệ mới mỗi 1-2 năm, ví dụ như dòng
GTX 1000 (Pascal) ra mắt vào 2017 và dòng RTX 2000 (Turing) ra mắt vào
2019. Mỗi dòng gồm có nhiều mẫu khác nhau cung cấp mức hiệu năng khác
nhau. Hiệu năng GPU chủ yếu là sự kết hợp của ba thông số sau:
.. raw:: html
1. **Khả năng tính toán**. Thông thường ta quan tâm đến khả năng tính
toán dấu phẩy động 32-bit (*32-bit floating-point*). Huấn luyện mô
hình sử dụng dấu phẩy động 16-bit (FP16 - *16-bit floating point*)
cũng đang dần phổ biến. Nếu chỉ quan tâm đến tác vụ dự đoán, bạn cũng
có thể sử dụng số nguyên 8-bit (*8-bit integer*). Thế hệ mới nhất của
GPU Turing còn cung cấp chế độ tăng tốc 4-bit (*4-bit acceleration*).
Không may là hiện nay, các thuật toán huấn luyện với số thực độ chính
xác thấp vẫn chưa được phổ biến.
2. **Kích thước bộ nhớ**. Khi các mô hình của bạn trở nên lớn hơn hay
khi tăng kích thước batch khi huấn luyện, bạn sẽ cần nhiều bộ nhớ GPU
hơn. Hãy kiểm tra HBM2 (Bộ nhớ Băng thông cao - *High Bandwidth
Memory*) và GDDR6 (DDR Đồ hoạ - *Graphics DDR*). HBM2 nhanh hơn nhưng
đắt hơn nhiều.
3. **Băng thông bộ nhớ**. Bạn chỉ có thể tận dụng tối đa khả năng tính
toán nếu bạn có đủ băng thông bộ nhớ. Hãy chọn bus bộ nhớ rộng nếu sử
dụng GDDR6.
.. raw:: html
Với phần lớn người dùng, tập trung vào khả năng tính toán là đủ. Chú ý
rằng các GPU khác nhau cung cấp các cách tăng tốc khác nhau, ví dụ như
TensorCores của NVIDIA tăng tốc một tập con các toán tử lên tới gấp 5
lần. Vậy nên hãy đảm bảo rằng thư viện của bạn hỗ trợ việc này. Bộ nhớ
GPU thì không nên ít hơn 4 GB (8 GB thì hơn). Hãy cố gắng tránh sử dụng
GPU để hiện thị giao diện đồ họa người dùng (GUI), thay vào đó nếu cần
hãy sử dụng card đồ hoạ tích hợp sẵn trong máy. Nếu bắt buộc phải dùng
GPU để hiển thị GUI, hãy thêm vào 2 GB RAM cho an toàn.
.. raw:: html
:numref:`fig_flopsvsprice` so sánh khả năng tính toán dấu phẩy động
32-bit và giá của các mẫu khác nhau của các dòng GTX 900, GTX 1000 và
RTX 2000. Đây là bảng giá đề xuất có thể được tìm thấy trên Wikipedia.
.. raw:: html
.. _fig_flopsvsprice:
.. figure:: ../img/flopsvsprice.svg
So sánh khả năng tính toán dấu phẩy động và giá.
.. raw:: html
Bạn có thể thấy một số điểm sau:
.. raw:: html
1. Trong cùng một dòng, giá và hiệu năng gần như tỷ lệ với nhau. Mẫu
Titan yêu cầu một khoản tiền đáng kể để đổi lấy lợi ích của lượng lớn
bộ nhớ GPU. Tuy nhiên, những mẫu mới hơn cung cấp hiệu quả chi phí
tốt hơn, như có thể thấy qua so sánh giữa 980 Ti và 1080 Ti. Giá
dường như không cải thiện nhiều đối với dòng RTX 2000. Tuy nhiên,
việc này là do chúng cung cấp hiệu năng hoàn toàn vượt trội đối với
các giá trị có độ chính xác thấp (FP16, INT8 và INT4).
2. tỷ lệ hiệu năng trên giá của dòng GTX 1000 lớn hơn khoảng 2 lần so
với dòng 900.
3. Với dòng RTX 2000, giá là một hàm *affine* của hiệu năng.
.. raw:: html
.. _fig_wattvsprice:
.. figure:: ../img/wattvsprice.svg
Khả năng tính toán dấu phẩy động và năng lượng tiêu hao.
.. raw:: html
:numref:`fig_wattvsprice` chỉ ra lượng năng lượng tiêu hao chủ yếu tỷ
lệ tuyến tính với khối lượng tính toán. Thứ hai, các thế hệ sau có hiệu
quả tốt hơn. Đồ thị của dòng RTX 2000 có vẻ như mâu thuẫn với điều này.
Tuy nhiên, đây là hệ quả của TensorCore yêu cầu năng lượng rất lớn.
Tóm tắt
-------
.. raw:: html
- Chú ý nguồn, luồng bus PCIe, tốc độ CPU đơn luồng và tản nhiệt khi
xây dựng máy chủ.
- Bạn nên mua thế hệ GPU mới nhất nếu có thể.
- Sử dụng đám mây để triển khai các dự án lớn.
- Máy chủ chạy nhiều ứng dụng có thể sẽ không tương thích với tất cả
các GPU. Kiểm tra các thông số cơ học và tản nhiệt trước khi mua.
- Sử dụng FP16 hoặc độ chính xác thấp hơn để có được hiệu năng tốt hơn.
Thảo luận
---------
- Tiếng Anh: `Main Forum `__
- Tiếng Việt: `Diễn đàn Machine Learning Cơ
Bản `__
Những người thực hiện
---------------------
Bản dịch trong trang này được thực hiện bởi:
- Đoàn Võ Duy Thanh
- Đỗ Trường Giang
- Nguyễn Văn Cường
- Lê Khắc Hồng Phúc
- Phạm Hồng Vinh
- Phạm Minh Đức
- Nguyễn Văn Quang
- Nguyễn Mai Hoàng Long