GPU và Deep Learning
Graphics Processing Unit hay GPU, là một bộ xử lý chuyên dụng được sử dụng để xử lý song song tốc độ cao. Nghe có vẻ mang tính kỹ thuật, nhưng cái tên này đang trở nên quen thuộc khi khả năng ứng dụng và tính phổ biến của chúng tăng lên. Ban đầu được thiết kế để nâng cao trải nghiệm hình ảnh cho game và các phần mềm có giao diện đồ họa (GUI) phức tạp, phạm vi ứng dụng của nó đã tăng lên đáng kể. GPU hiện được sử dụng trong rất nhiều ứng dụng có tầm quan trọng trong mọi mặt của cuộc sống. Bài viết này sẽ đề cập chuyên biệt về sự phù hợp của chúng cho các tác vụ Deep Learning.
Phần lớn năng lực xử lý trong các hệ thống Deep Learning được thực hiện bởi một tập gồm nhiều phép toán nhỏ. GPU được thiết kế để thực hiện các tác vụ này rất nhanh và hiệu quả. Thành phần máy tính này không thay thế CPU mang tính đa năng hơn, mà nó bổ trợ cho CPU bằng cách giải quyết các vấn đề rất cụ thể và đòi hỏi xử lý với số lượng lớn.
Có phải tất cả các GPU được tạo ra như nhau?
Các GPU hiện có trên thị trường có năng lực xử lý được đo bằng một số thông số chính. Chúng bao gồm tốc độ xử lý, số lõi GPU, dung lượng, tốc độ và băng thông bộ nhớ. Mỗi thông số trong số này đều quan trọng và tùy thuộc vào ứng dụng, việc cải tiến một thông số sẽ dẫn đến khả năng xử lý tổng thể nhanh hơn.
Với rất nhiều tùy chọn, điều cần thiết là phải nghiên cứu trước để chọn GPU tốt nhất cho tác vụ cụ thể. Điểm xuất phát rõ ràng là thương hiệu, hoặc nhà sản xuất. Một thương hiệu GPU này có hoạt động tốt hơn thương hiệu GPU khác cho các dự án học sâu không? Hãy cùng điểm qua một số điểm quan trọng.
Thị phần
GPU được cung cấp từ một số nhà sản xuất chính, đáng chú ý nhất là NVIDIA và AMD. Trên thực tế, theo công ty nghiên cứu Jon Peddie, hai nhà cung cấp này cùng nhau chiếm gần như 100% thị phần. Giữa các đối thủ này, GPU NVIDIA phổ biến hơn AMD với hệ số gần như 2:1 và điều này có lý do của nó. Nó phụ thuộc vào sự kết hợp của hiệu suất GPU và vấn đề hỗ trợ (support).
Vấn đề hỗ trợ
Cho dù ứng dụng của bạn được phát triển nội bộ hay do bên thứ ba, vấn đề quan trọng là làm sao để công việc của lập trình viên trở nên đơn giản nhất có thể. Khi nhà phát triển phần mềm nhận được sự hỗ trợ tuyệt vời cho dự án của họ, nó sẽ trở thành một sản phẩm tuyệt vời. Các lập trình viên sẽ tạo ra các ứng dụng tuyệt vời, không có lỗi. Tuy nhiên, có thể ít người nhận ra rằng một thành phần được hỗ trợ kém sẽ khó làm việc hơn. Điều này dẫn đến thời gian phát triển tăng lên và khả năng cao hơn là lỗi sẽ phát sinh và cản trở tiến trình phát triển trong tương lai.
Dự án deep learning điển hình được xây dựng dựa trên phần mềm hiện có, không ít phần mềm thường bao gồm các thư viện API khác nhau có thể truy cập được. Trong nhiều trường hợp, nền tảng là kết quả của quá trình phát triển nội bộ sâu rộng đã phát triển qua nhiều thế hệ production khác nhau, được thử nghiệm và sửa đổi. Bất kể bên vận hành đứng ở đâu, giữa nhà thiết kế và người dùng cuối, cuối cùng họ vẫn dựa vào nhà phát triển để đưa sản phẩm của họ vào đời sống. Đến lượt nhà phát triển lại dựa vào cả năng lực của sản phẩm và sự hỗ trợ cần thiết để làm cho nó hoạt động.
Các thư viện tăng tốc GPU
Từ quan điểm của một nhà phát triển và deep learning, vấn đề hỗ trợ sẽ trông như thế nào? Một yếu tố quan trọng là sự sẵn sàng của các thư viện tăng tốc GPU, chẳng hạn như CUBLAS hoặc CURAND. Đây là một phần của Compute Unified Device Architecture (CUDA) của NVIDIA, là một nền tảng máy tính do NVIDIA tạo ra để hỗ trợ các lập trình viên sử dụng tài nguyên GPU. Một phần quan trọng khác cho gói dành riêng cho NVIDIA này là CUFFT, đây là phần mềm thay thế tương thích cho thư viện chỉ dành cho CPU FFTW (Fast Fourier Transform in the West). Các thư viện này chỉ tạo nên một phần của kho công cụ khổng lồ với cơ sở kiến thức ngày càng mở rộng. Vì vậy, tại sao tất cả những điều này lại quan trọng?
Nó quan trọng vì những tên tuổi lớn nhất trong lĩnh vực Deep Learning đều gắn liền với CUDA. Điều thực sự quan trọng là khi các Deep Learning framework được so sánh, một trong những tính năng chính là liệu package đó có hỗ trợ kiến trúc CUDA hay không.
Deep learning và các framework số học
Các deep learning framework được các nhà phát triển sử dụng để giúp tận dụng sức mạnh của công nghệ thông qua giao diện lập trình cấp cao. Bằng cách sử dụng một ngôn ngữ như Python, các nhà phát triển phần mềm làm việc trừu tượng hơn và ít phải lo lắng hơn về các chi tiết kỹ thuật. Mặc dù các hàm chuyên sâu về toán học được viết bằng các ngôn ngữ như C++, nhưng các hàm này có thể truy cập được thông qua các API cấp cao. Các lập trình viên sử dụng các framework được hỗ trợ tốt sẽ được hưởng lợi từ nỗ lực trước đó về những nghiên cứu, phát triển và thử nghiệm. Khi viết bài này, framework phổ biến nhất cho các ứng dụng deep learning là TensorFlow.
TensorFlow
TensorFlow được nhiều người ca ngợi vì đã đơn giản hóa và trừu tượng hóa các nhiệm vụ deep learning. Được phát triển bởi nhóm Google Brain, TensorFlow là một thư viện mã nguồn mở giúp machine learning nhanh hơn và dễ dàng hơn. Framewoek phổ biến này sử dụng rộng rãi kiến trúc CUDA. Trên thực tế, không có CUDA, toàn bộ sức mạnh của GPU của bạn sẽ không được giải phóng trong các ứng dụng TensorFlow.
Để tìm hiểu sâu hơn về TensorFlow, hãy tìm đọc chủ đề TensorFlow trong blog Thế Giới Máy Chủ.
PyTorch
PyTorch là một package tính toán khoa học được sử dụng để cung cấp tốc độ và tính linh hoạt trong các dự án deep learning. Trong giai đoạn phát triển, nó có thể được sử dụng để thay thế cho thư viện chỉ dành cho CPU, NumPy (NumPy Python), được dựa nhiều vào việc thực hiện các phép toán trong Mạng thần kinh. PyTorch cũng dựa vào thư viện CUDA để tăng tốc GPU và tính đến thời điểm viết bài này, hỗ trợ cho GPU AMD không có sẵn ở framework này.
Microsoft Cognitive Toolkit(Trước đây là CNTK)
The Microsoft Cognitive Toolkit là một deep learning framework ban đầu được phát triển để sử dụng nội bộ tại Microsoft. Sau khi được phát hành và có sẵn cho tất cả mọi người sử dụng như một gói mã nguồn mở, CNTK đã trở thành một trong những framework deep learning được biết đến rộng rãi nhất. Mặc dù nhiều người dùng hiện nay được báo cáo sử dụng TensorFlow và PyTorch, bộ công cụ này vẫn được ghi nhận là dễ sử dụng và khả năng tương thích tốt. Package này hỗ trợ cả hoạt động của CPU và GPU, mặc dù việc sử dụng bộ tăng tốc GPU yêu cầu sử dụng thư viện CUDNN độc quyền của NVIDIA.
Tốc độ
Khi nói đến máy tính, điều đầu tiên đối với hầu hết mọi người là tốc độ. Bất kể ứng dụng ra đời như thế nào, thời gian đào tạo nhanh là điều cần thiết đối với các mô hình Deep Learning. Hệ thống được đào tạo càng nhanh, bạn càng sớm có kết quả. Tất nhiên điều này đặt ra câu hỏi: GPU nhanh như thế nào?
Khi nói đến GPU, hiệu suất thực sự là sự kết hợp của sức mạnh tính toán thô, bộ nhớ và băng thông. Tuy nhiên, nói chung, số lượng FLOPS (hoạt động dấu chấm động trên giây) càng cao, bộ xử lý càng nhanh. Gần đây, Tom’s Hardware đã công bố danh sách xếp hạng tốc độ của mọi GPU hiện có trên thị trường. Đáng chú ý, các GPU của NVIDIA chiếm sáu vị trí đầu tiên, khiến thương hiệu này có ưu thế rõ ràng về tốc độ.
Bộ nhớ
Bất kể tác vụ được thực hiện bởi CPU hay GPU, nó đều yêu cầu bộ nhớ (RAM). Điều này là do bộ xử lý chịu trách nhiệm thực hiện các tính toán quan trọng và kết quả cho mỗi lượt cần được lưu trữ. Đối với các tác vụ đòi hỏi khắt khe như trong các ứng dụng deep learning, cần phải có một lượng bộ nhớ đáng kể. Nếu không có đủ RAM, hiệu suất sẽ bị giảm đáng kể và không thể phát huy hết tiềm năng của sức mạnh xử lý thô.
Đối với GPU và RAM, có hai loại: Tích hợp và Chuyên dụng. GPU tích hợp không có bộ nhớ riêng. Thay vào đó, nó chia sẻ bộ nhớ trên bo mạch được CPU sử dụng. Ngược lại, một GPU chuyên dụng thực hiện các phép tính bằng RAM của chính nó. Mặc dù GPU chuyên dụng có giá cao hơn nhưng với bộ nhớ bổ sung thường nằm trong khoảng từ 2 GB đến 12 GB, có những lợi thế quan trọng.
Thứ nhất, một GPU chuyên dụng sẽ không bị ảnh hưởng xấu bởi một CPU đang chịu tải nặng. Không cần phải chia sẻ RAM, nó thực sự chạy song song mà không cần phải đợi các hoạt động liên quan đến CPU hoàn tất. Tiếp theo, và có lẽ quan trọng hơn, một GPU chuyên dụng sẽ chứa chip nhớ hiệu suất cao hơn. Sự gia tăng tốc độ bộ nhớ này là yếu tố tác động trực tiếp vào băng thông, đây là một đặc tính quan trọng khác được sử dụng để đánh giá hiệu suất tổng thể.
Băng thông
Sẽ không có tranh luận nào về bộ nhớ truy cập ngẫu nhiên (random access memory) nếu không đề cập đến băng thông (bandwidth) và cách nó ảnh hưởng đến hoạt động. Băng thông là sự kết hợp của tốc độ bộ nhớ, độ rộng bộ nhớ và loại bộ nhớ. Mặc dù mỗi thứ đều có ý nghĩa, nhưng tốt nhất nên tóm tắt bằng cách nêu rõ rằng khi băng thông không đạt tiêu chuẩn, GPU sẽ dành nhiều thời gian nhàn rỗi khi đợi RAM phản hồi. Không có gì đáng ngạc nhiên khi một GPU giá thấp hơn của cùng một nhà sản xuất có thể chỉ khác nhau về băng thông và do đó, đây là một tính năng quan trọng cần xem xét.
Tôi nên chọn thương hiệu GPU nào?
Trong điều kiện công nghệ hiện nay, GPU NVIDIA là lựa chọn tốt nhất cho những ai quan tâm đến Deep Learning. Không nghi ngờ gì về việc AMD tạo ra phần cứng tuyệt vời và bộ vi xử lý mạnh mẽ, nhưng xét về các yếu tố quan trọng nhất – tốc độ của GPU và vấn đề hỗ trợ – thì đơn giản là không ai cạnh tranh được với NVIDIA ở thời điểm này.
Vì sao? Cuối cùng thì, sự phát triển của một ứng dụng deep learning phụ thuộc vào vấn đề hỗ trợ, và khi hệ thống đã sẵn sàng, nó chuyển sang bài toán về tốc độ xử lý. Tốc độ của GPU được xác định bởi một số thành phần, trong đó bộ nhớ và băng thông cũng quan trọng như tốc độ xung nhịp của GPU. Cho dù bạn là nhà phát triển, nhà cung cấp hay người dùng cuối – cho dù bạn ở góc độ nào, thì việc có một GPU nhanh là chìa khóa để bạn nhận được kết quả tốt nhất.
Bài viết liên quan