Deep Learning là một lĩnh vực với các yêu cầu tính toán mạnh mẽ và việc lựa chọn GPU của bạn về cơ bản sẽ quyết định trãi nghiệm triển khai Deep Learning của bạn. Nhưng những tính năng nào là quan trọng nếu bạn muốn mua GPU mới? RAM GPU, Core, Tensor Core? Làm thế nào để quyết định lựa chọn với chi phí hiệu quả? Bài này sẽ đi sâu vào những câu hỏi và sẽ cho bạn lời khuyên giúp bạn đưa ra lựa chọn phù hợp.
Việc có GPU chạy nhanh là một yếu tố rất quan trọng khi bắt đầu dự án Deep Learning vì điều này cho phép đạt được kết quả nhanh chóng theo kinh nghiệm thực tế, đó là chìa khóa để xây dựng chuyên môn mà bạn sẽ có thể áp dụng Deep Learning vào các vấn đề mới. Thiếu thiết bị có sức mạnh phù hợp, bạn chỉ mất quá nhiều thời gian để học hỏi từ những sai lầm của người khác và có thể nản lòng khi tiếp tục triển khai dự án Deep Learning. Với GPU, tôi đã học được cách áp dụng Deep Learning vào một loạt các cuộc thi Kaggle và tôi đã giành được vị trí thứ hai trong Partly Sunny với cuộc thi Chance of Hashtags Kaggle bằng cách sử dụng phương pháp Deep Learning, trong đó có một nhiệm vụ xếp hạng việc dự báo thời tiết. Trong cuộc thi, tôi đã sử dụng một deep neural network (DNN) hai lớp có quy mô lớn với các đơn vị tuyến tính được điều chỉnh để chuẩn hóa và DNN này chỉ vừa đủ trong bộ nhớ GPU 6GB của tôi. Các GPU GTX Titan hỗ trợ tôi trong cuộc thi là yếu tố chính giúp tôi đạt vị trí thứ 2 trong cuộc thi.
Tổng quan
Bài này được cấu trúc theo cách sau. Đầu tiên tôi thảo luận về việc có nhiều GPU sẽ hữu ích như thế nào, sau đó tôi thảo luận về tất cả các tùy chọn phần cứng có liên quan như GPU NVIDIA và AMD, Intel Xeon Phi, Google TPU và phần cứng cho startup mới. Sau đó, tôi thảo luận về thông số kỹ thuật GPU là chỉ số tốt cho hiệu suất của Deep Learning. Phần chính thảo luận về phân tích hiệu suất và hiệu quả chi phí. Tôi kết luận với các gợi ý GPU vừa tổng quan, vừa cụ thể hơn.

Nhiều GPU làm cho việc training của tôi nhanh hơn?
Khi bắt đầu sử dụng nhiều GPU, tôi rất hào hứng với việc thiết lập xử lý song song để cải thiện hiệu năng thời gian chạy cho cuộc thi Kaggle. Tuy nhiên, tôi thấy rằng rất khó để đạt được tốc độ mong muốn chỉ đơn giản bằng cách sử dụng nhiều GPU. Tò mò về vấn đề này, tôi bắt đầu thực hiện nghiên cứu vấn đề xử lý song song trong học Deep Learning. Tôi đã phân tích việc xử lý song song trong các kiến trúc Deep Learning, phát triển kỹ thuật lượng tử hóa 8 bit để tăng tốc độ trong các cụm GPU từ 23x lên 50x cho hệ thống 96 GPU và công bố nghiên cứu của tôi tại ICLR 2016.
Điểm quan trọng được nhận ra là các network thuộc kiểu “convolution” và “recurrent” lại khá dễ để song song hóa, đặc biệt nếu bạn chỉ sử dụng một máy tính hoặc 4 GPU. Tuy nhiên, các network được kết nối toàn phần bao gồm cả máy biến áp không đơn giản để song song và cần các thuật toán chuyên dụng để thực hiện tốt.

Hiện tại, không có công ty nào ở gần hoàn thành cả hai bước phần cứng và phần mềm. Intel NNP có thể là gần nhất, nhưng từ tất cả những thứ này không thể mong đợi một sản phẩm cạnh tranh trước năm 2020 hoặc 2021. Vì vậy, hiện tại chúng ta sẽ cần phải gắn bó với GPU và TPU.
Do đó, phần cứng mới lạ mắt từ khởi động yêu thích của bạn có thể được bỏ qua một cách an toàn cho đến bây giờ.
Điều gì làm cho một GPU nhanh hơn một GPU khác?
Câu hỏi đầu tiên của bạn có thể là tính năng quan trọng nhất cho hiệu năng GPU nhanh để Deep Learning: Đó có phải là core CUDA không? Tốc độ đồng hồ? Dung lượng RAM?
Năm 2019, việc lựa chọn GPU trở nên khó hiểu hơn bao giờ hết: điện toán 16 bit, core căng, GPU 16 bit không có core kéo, nhiều thế hệ GPU vẫn còn khả thi (Turn, Volta, Maxwell). Nhưng vẫn có một số chỉ số hiệu suất đáng tin cậy mà mọi người có thể sử dụng như một quy tắc. Dưới đây là một số hướng dẫn ưu tiên cho các kiến trúc Deep Learning khác nhau:
Mạng kết hợp và máy biến áp: core kéo> FLOPs> Băng thông bộ nhớ> Khả năng 16 bit
Mạng tái phát: Băng thông bộ nhớ> Khả năng 16 bit> core kéo> FLOP
Điều này có nội dung như sau: Nếu tôi muốn sử dụng, ví dụ, mạng chập, trước tiên tôi nên ưu tiên GPU có core căng, sau đó là số FLOP cao, sau đó là băng thông bộ nhớ cao và sau đó là GPU có khả năng 16 bit . Trong khi ưu tiên, điều quan trọng là chọn một GPU có đủ bộ nhớ GPU để chạy các mô hình mà người ta quan tâm.
Tại sao cần những sự ưu tiên này?
Một điều giúp tăng cường sự hiểu biết của bạn để đưa ra lựa chọn sáng suốt là tìm hiểu một chút về phần nào của phần cứng giúp GPU nhanh cho hai hoạt động căng thẳng quan trọng nhất: Nhân ma trận và tích chập.
Một cách đơn giản và hiệu quả để suy nghĩ về phép nhân ma trận A * B = C là giới hạn băng thông bộ nhớ: Sao chép bộ nhớ của A, B cho đến khi chip tốn kém hơn so với việc tính toán A * B. Điều này có nghĩa là băng thông bộ nhớ là tính năng quan trọng nhất của GPU nếu bạn muốn sử dụng các LSTM và các mạng lặp lại khác thực hiện nhiều phép nhân ma trận nhỏ. Phép nhân ma trận càng nhỏ, băng thông bộ nhớ càng quan trọng.
Ngược lại, tích chập bị ràng buộc bởi tốc độ tính toán. Do đó, TFLOP trên GPU là chỉ số tốt nhất cho hiệu suất của ResNets và các kiến trúc tích chập khác. core kéo có thể tăng FLOP đáng kể.
Phép nhân ma trận lớn như được sử dụng trong các máy biến áp nằm giữa tích chập và phép nhân ma trận nhỏ của RNN. Phép nhân ma trận lớn được hưởng lợi rất nhiều từ bộ lưu trữ 16 bit, core kéo và FLOP nhưng chúng vẫn cần băng thông bộ nhớ cao.
Lưu ý rằng để sử dụng các lợi ích của core kéo, bạn nên sử dụng dữ liệu và trọng lượng 16 bit – tránh sử dụng 32 bit với thẻ RTX! Nếu bạn gặp phải vấn đề với training 16 bit khi sử dụng PyTorch, thì bạn nên sử dụng tỷ lệ mất động như được cung cấp bởi thư viện Apex . Nếu bạn sử dụng TensorFlow, bạn có thể tự thực hiện chia tỷ lệ tổn thất: (1) nhân số lỗ của bạn với một số lớn, (2) tính toán độ dốc, (3) chia cho số lớn, (4) cập nhật trọng số của bạn. Thông thường, training 16 bit sẽ tốt, nhưng nếu bạn gặp khó khăn trong việc sao chép kết quả với tỷ lệ mất 16 bit thường sẽ giải quyết được vấn đề.

Phân tích hiệu quả chi phí
Hiệu quả chi phí của GPU có lẽ là tiêu chí quan trọng nhất để chọn GPU. Phân tích hiệu suất cho cập nhật bài đăng trên blog này được thực hiện như sau:
(1) Đối với máy biến áp, tôi đã điểm chuẩn Transformer-XL và BERT.
(2) Đối với RNN từ và char tôi đã điểm chuẩn các mô hình biLSTM hiện đại.
(3) Việc đo điểm chuẩn trong (1) và (2) đã được thực hiện cho Titan Xp, Titan RTX và RTX 2080 Ti. Đối với các thẻ khác, tôi chia tỷ lệ chênh lệch hiệu suất một cách tuyến tính.
(4) Tôi đã sử dụng điểm chuẩn hiện có cho CNN: ( 1 , 2 , 3 , 4 , 5 , 6 , 7 ).
(5) Tôi đã sử dụng chi phí trung bình của Amazon và eBay làm chi phí tham chiếu cho GPU.

Từ dữ liệu này, chúng ta thấy rằng RTX 2060 tiết kiệm chi phí hơn RTX 2070, RTX 2080 hoặc RTX 2080 Ti. Tại sao cái này rất? Khả năng thực hiện tính toán 16 bit với Tensor Cores có giá trị hơn nhiều so với việc chỉ có một con tàu lớn hơn với nhiều core Tensor Cores. Với RTX 2060, bạn có được những tính năng này với giá thấp nhất.
Tuy nhiên, phân tích này có những thành kiến nhất định cần được tính đến:
(1) Phân tích này thiên vị mạnh mẽ ủng hộ các thẻ nhỏ hơn. GPU nhỏ hơn, tiết kiệm chi phí có thể không có đủ bộ nhớ để chạy các mô hình mà bạn quan tâm!
(2) Giá quá cao thẻ GTX 10xx: Hiện tại, thẻ GTX 10XX dường như được định giá quá cao do các game thủ không thích thẻ RTX.
(3) Xu hướng GPU đơn: Một máy tính có 4 thẻ không hiệu quả về chi phí (4x RTX 2080 Ti) tiết kiệm chi phí hơn nhiều so với 2 máy tính có thẻ chi phí / hiệu quả nhất (8x RTX 2060).
Cảnh báo: Sự cố nhiệt trên RTX đa GPU
Có vấn đề với RTX 2080 Ti và các GPU RTX khác với quạt kép tiêu chuẩn nếu bạn sử dụng nhiều GPU chạy cạnh nhau. Điều này đặc biệt như vậy đối với nhiều RTX 2080 Ti trong một máy tính nhưng nhiều RTX 2080 và RTX 2070 cũng có thể bị ảnh hưởng. Quạt trên một số thẻ RTX là một thiết kế mới được NVIDIA phát triển để cải thiện trải nghiệm cho các game thủ chạy một GPU (im lặng, nhiệt thấp hơn cho một GPU). Tuy nhiên, thiết kế rất tệ nếu bạn sử dụng nhiều GPU có thiết kế quạt kép mở này. Nếu bạn muốn sử dụng nhiều thẻ RTX chạy cạnh nhau (trực tiếp trong khe PCIe tiếp theo) thì bạn nên lấy phiên bản có thiết kế quạt đơn kiểu quạt gió kiểu Drake. Điều này đặc biệt đúng với thẻ RTX 2080 Ti. ASUS và PNY hiện có các mẫu RTX 2080 Ti trên thị trường với quạt kiểu quạt gió.
Kích thước bộ nhớ cần thiết và training 16 bit
Bộ nhớ trên GPU có thể rất quan trọng đối với một số ứng dụng như thị giác máy tính, dịch máy và một số ứng dụng NLP khác và bạn có thể nghĩ rằng RTX 2070 tiết kiệm chi phí, nhưng bộ nhớ của nó quá nhỏ với 8 GB. Tuy nhiên, lưu ý rằng thông qua training 16 bit, bạn hầu như có bộ nhớ 16 GB và mọi mô hình tiêu chuẩn sẽ dễ dàng phù hợp với RTX 2070 của bạn nếu bạn sử dụng 16 bit. Điều tương tự cũng đúng với RTX 2080 và RTX 2080 Ti. Tuy nhiên, xin lưu ý rằng trong hầu hết các khung phần mềm, bạn sẽ không tự động tiết kiệm một nửa bộ nhớ bằng cách sử dụng 16 bit vì một số khung lưu trữ trọng lượng trong 32 bit để thực hiện cập nhật độ dốc chính xác hơn, v.v. Một nguyên tắc nhỏ là giả sử thêm 50% bộ nhớ với tính toán 16 bit. Vì vậy, bộ nhớ 8GB 16 bit có kích thước tương đương với bộ nhớ 12 GB 12 bit.
Khuyến nghị chung về GPU
Hiện tại, khuyến nghị chính của tôi là lấy GPU RTX 2070 và sử dụng training 16 bit. Tôi sẽ không bao giờ khuyên bạn nên mua XP Titan, Titan V, bất kỳ thẻ Quadro hoặc bất kỳ GPU Phiên bản sáng lập nào. Tuy nhiên, có một số GPU cụ thể cũng có vị trí của chúng:
(1) Để có thêm bộ nhớ, tôi muốn giới thiệu RTX 2080 Ti. Nếu bạn thực sự cần nhiều bộ nhớ bổ sung, RTX Titan là lựa chọn tốt nhất – nhưng hãy chắc chắn rằng bạn thực sự cần bộ nhớ đó!
(2) Để có hiệu suất cao hơn, tôi muốn giới thiệu RTX 2080 Ti.
(3) Nếu bạn thiếu tiền, tôi sẽ giới thiệu bất kỳ thẻ GTX 10XX giá rẻ nào từ eBay (tùy thuộc vào dung lượng bộ nhớ bạn cần) hoặc RTX 2060. Nếu quá đắt, hãy xem Colab .
(4) Nếu bạn chỉ muốn bắt đầu với việc tìm hiểu sâu thì GTX 1060 (6GB) là một lựa chọn tuyệt vời.
(5) Nếu bạn đã có GTX 1070 trở lên: Đợi nó ra. Một bản nâng cấp không đáng giá trừ khi bạn làm việc với các máy biến áp lớn.
(6) Bạn muốn học nhanh cách Deep Learning: Nhiều GTX 1060 (6GB).
Deep Learning trong đám mây
Cả hai phiên bản GPU trên AWS / Azure và TPU trong Google Cloud đều là các tùy chọn khả thi để Deep Learning. Mặc dù TPU rẻ hơn một chút nhưng nó lại thiếu tính linh hoạt và linh hoạt của GPU đám mây. TPU có thể là vũ khí được lựa chọn để training mô hình nhận dạng đối tượng hoặc máy biến áp. Đối với các GPU đám mây tải công việc khác là đặt cược an toàn hơn – điều tốt về các trường hợp đám mây là bạn có thể chuyển đổi giữa GPU và TPU bất cứ lúc nào hoặc thậm chí sử dụng cả hai cùng một lúc.
Tuy nhiên, hãy chú ý đến chi phí cơ hội ở đây: Nếu bạn học các kỹ năng để có một luồng công việc trôi chảy với AWS / Azure, bạn đã mất thời gian có thể làm việc trên GPU cá nhân và bạn cũng sẽ không có được các kỹ năng để sử dụng TPU. Nếu bạn sử dụng GPU cá nhân, bạn sẽ không có kỹ năng mở rộng thành nhiều GPU / TPU hơn thông qua đám mây. Nếu bạn sử dụng TPU, bạn có thể bị kẹt với TensorFlow trong một thời gian nếu bạn muốn các tính năng đầy đủ và sẽ không đơn giản để chuyển cơ sở mã của bạn sang PyTorch. Học một luồng công việc GPU / TPU trên đám mây trơn tru là một chi phí cơ hội đắt đỏ và bạn nên cân nhắc chi phí này nếu bạn lựa chọn cho TPU, GPU đám mây hoặc GPU cá nhân.
Một câu hỏi khác cũng là về khi nào nên sử dụng dịch vụ đám mây. Nếu bạn cố gắng Deep Learning hoặc bạn cần tạo nguyên mẫu thì GPU cá nhân có thể là lựa chọn tốt nhất vì các trường hợp đám mây có thể tốn kém. Tuy nhiên, một khi bạn đã tìm thấy một cấu hình mạng sâu tốt và bạn chỉ muốn training một mô hình bằng cách sử dụng song song dữ liệu thì sử dụng các trường hợp đám mây là một cách tiếp cận chắc chắn. Điều này có nghĩa là một GPU nhỏ sẽ đủ để tạo mẫu và người ta có thể dựa vào sức mạnh của điện toán đám mây để mở rộng quy mô cho các thử nghiệm lớn hơn.
Nếu bạn thiếu tiền, các trường hợp điện toán đám mây cũng có thể là một giải pháp tốt: Nguyên mẫu trên CPU và sau đó tung ra các phiên bản GPU / TPU để chạy nhanh. Đây không phải là luồng công việc tốt nhất vì việc tạo mẫu trên CPU có thể là một nỗi đau lớn, nhưng nó có thể là một sự thay thế hiệu quả về chi phí.
Phần kết luận
Với thông tin trong bài đăng trên blog này, bạn sẽ có thể suy luận GPU nào phù hợp với mình. Nói chung, tôi thấy ba chiến lược chính (1) gắn với GPU GTX 1070 hoặc tốt hơn của bạn, (2) mua GPU RTX, (3) sử dụng một số loại GPU để tạo mẫu và sau đó huấn luyện mô hình của bạn trên GPU TPU hoặc GPU đám mây.