DeepSeek AI tận dụng tốt tài nguyên nhờ năng lực lập trình gần đạt mức assembly?
Đăng lúc
21:42 03.02.2025
Theo một số chuyên gia, DeepSeek không cần tới cả CUDA để khai thác GPU của NVIDIA.
Sự xuất hiện của DeepSeek trong những ngày vừa qua là một cơn địa chấn với giới công nghệ toàn cầu, đặc biệt là mảng AI. Theo mô tả của đơn vị phát hành, DeepSeek có ưu điểm vượt trội khi không phải tốn quá nhiều tài nguyên phần cứng để vận hành. Một điều như cú tát vào mặt toàn bộ thung lũng Silicon khi các đại diện như Alphabet, Meta, Microsoft cứ liên tục rót hàng chục tỷ USD để mua thêm chip mới.
Song nhiều người tỏ ra hoài nghi thông tin này của DeepSeek. Họ cho rằng công ty Trung Quốc đã không nói thật trong vấn đề đầu tư cơ sở hạ tầng điện toán, rằng thực tế công ty này cần nhiều chip hơn thế đã đạt năng lực suy luận cần thiết cho ra tốc độ hồi đáp nhanh chóng mà đôi khi còn nhanh hơn cả ChatGPT. Nhìn chung có rất nhiều lời bàn tán xoay quanh vấn đề này.
Mới đây theo chia sẻ của một tài khoản Twitter/X, việc DeepSeek ưu việt hơn các mô hình AI hiện có của Mỹ là hoàn toàn có thể, dựa trên cơ sở DeepSeek sử dụng công cụ lập trìnhPTX (Parallel Thread Execution) gần ngang cấp độ assembly, chứ không thuần tuý dựa trên CUDA như các công ty khác.
Về cơ bản mà nói, CUDA C/C++ là một ngôn ngữ lập trình cấp cao. Còn PTX gần với ngôn ngữ máy hơn, nó "sát" với chi tiết phần cứng (close-to-metal) hơn. Khi dùng PTX, lập trình viên có thể "nhìn rõ" các thành phần nhân xử lý hơn và từ đó, tiến hành tối ưu được chi tiết hơn tới từng thanh ghi, tập lệnh, điều chỉnh phân luồng thread. Đây là điều mà CUDA C/C++ hay các ngôn ngữ cấp cao khác không có được.
Bài phân tích có đoạn: "Do mô hình DeepSeek V3 được công khai như nguồn mở, nên các báo cáo kỹ thuật về V3 được mô tả rất chi tiết. Các tài liệu này thể hiện quy mô cấp thấp được thực hiện bởi DeepSeek. Nói theo kiểu đơn giản, mức độ tối ưu có thể gói gọn trong câu "dường như họ xây lại tất cả mọi thứ từ số không". Lấy ví dụ, khi train V3 với GPU NVIDIA H800, DeepSeek tuỳ chỉnh được tới từng phần tính toán cơ bản của GPU, được gọi là SM (Streaming Multiprocessor), cho hợp với nhu cầu của họ. Trong tổng 132 SM, họ có thể dành riêng ra 20 SM chỉ để đảm nhận liên lạc giữa máy chủ và máy chủ thay vì chỉ tính toán dữ liệu".
Lập trình assembly được xem là cảnh giới tối cao gần với máy móc nhất
Mặc dù sự tối ưu lập trình cấp thấp đem lại lợi ích hiệu năng rất cao, nhưng nó đòi hỏi sự đầu tư cao độ vì tính phức tạp của từng cấu hình chip, rất khó để triển khai trên nhiều thế hệ vi xử lý. Đây cũng là lý do tại sao các ngôn ngữ lập trình cấp cao như CUDA C/C++ được dùng phổ biến hơn, vì lập trình viên có thể nhanh chóng triển khai ứng dụng hơn mà không phải ngại sản phẩm của mình gặp trục trặc khi nâng cấp phần cứng xử lý.
Nếu bạn chưa biết thì trong lĩnh vực lập trình có rất nhiều ngôn ngữ, thường được chia thành các cấp độ gồm: cấp thấp, cấp trung và cấp cao. Thông thường khi nghe tới việc chia cấp độ như vầy, người ta sẽ cho rằng những ngôn ngữ cấp cao là ngôn ngữ hiện đại hơn, mạnh mẽ hơn các ngôn ngữ cấp thấp, điều này đúng và không đúng. Đúng ở chỗ ngôn ngữ lập trình cấp cao sẽ gần gũi hơn với lập trình viên, dễ đọc dễ hiểu, có những tính năng tiện lợi và mạnh. Còn không đúng ở chỗ nó mạnh với lập trình viên nhưng yếu nếu xét về mặt phần cứng. Lập trình là để viết nên các đoạn mã, tạo thành các phần mềm, ứng dụng để khai thác sức mạnh phần cứng, tuy nhiên phần cứng máy tính luôn hoạt động với mã nhị phân thuần túy, còn ngôn ngữ mà lập trình viên sử dụng, cuối cùng vẫn cần phải được biên dịch thành mã nhị phân, có vậy thì máy tính mới hiểu được.
Gần đạt mức assembly trong bài viết có nghĩa là cách các lập trình viên tại DeepSeek sử dụng công cụ PTX gần với ngôn ngữ assembly (hợp ngữ). Assembly là ngôn ngữ lập trình bậc thấp nhất, đại diện cho các lệnh máy tính dưới dạng ký hiệu dễ đọc hơn so với mã nhị phân. Dĩ nhiên con người hiện tại không thể lập trình theo kiểu 0 1 được. Mỗi lệnh assembly thực hiện một thao tác rất cụ thể, ví dụ như di chuyển dữ liệu, thực hiện phép tính, hoặc nhảy đến một vị trí khác trong chương trình. Assembly cũng cho phép lập trình viên tương tác trực tiếp với các thành phần phần cứng như thanh ghi (register), bộ nhớ cũng như các thành phần khác. Nếu bạn muốn tối ưu hết mức có thể để đạt được hiệu quả tối đa, assembly là cách tốt nhất, điều khiển phần cứng trực tiếp. Lấy ví dụ bạn là 1 giám đốc điều hành, bạn sẽ điều hành 1 nhóm các quản lý cấp cao, bên dưới quản lý cấp cao lại có thêm nhiều quản lý thấp hơn, dưới đó lại có từng tổ trưởng đứng đầu từng nhóm nhỏ, dưới cùng mới là nhân viên trực tiếp làm việc. Vì cấp độ quản lý của bạn quá cao nên bạn không thể ra lệnh chi tiết và cụ thể cho từng nhân viên mà bạn sẽ truyền đạt yêu cầu cho quản lý cấp bậc liền kề. Những quản lý này sẽ lại truyền đạt xuống cấp dưới, cứ thế... tới lượt nhân viên thực hiện yêu cầu. Vì không thể cụ thể và chi li nên nhiều khả năng yêu cầu của bạn có thể được thực hiện chỉ với 2 nhân viên là hiệu quả nhất, thì bên dưới điều động tới 10 nhân viên cùng làm, nôm na kiểu như vậy.
Còn PTX mà đội ngũ lập trình viên DeepSeek sử dụng là 1 kiến trúc tập lệnh ảo được phát triển bởi NVIDIA dành cho các GPU của hãng. PTX đóng vai trò là cầu nối giữa ngôn ngữ lập trình cấp cao (ví dụ: CUDA C/C++, OpenCL) và mã máy cụ thể của GPU (ví dụ SASS - Streaming ASSembler). PTX cho phép lập trình viên can thiệp sâu hơn vào quá trình biên dịch cũng như tối ưu mã cho GPU, kiểm soát phân bố thanh ghi, quản lý bộ nhớ, điều phối luồng xử lý để đạt được hiệu quả cao nhất. Quá trình thực thi treên GPU được kiểm soát chi tiết từng khía cạnh, linh hoạt hơn. Điều này đặc biệt quan trọng với các ứng dụng đòi hỏi hiệu năng cao như AI - thứ mà DeepSeek hướng tới, xử lý ảnh hay mô phỏng khoa học.
Bởi vậy đừng thấy cụm từ ngôn ngữ lập trình cấp/bậc/mức thấp mà coi thường. Để sử dụng được PTX đòi hỏi lập trình viên phải có kiến thức chuyên sâu về kiến trúc GPU, cách tổ chức bên trong, cách hoạt động của từng thành phần, đồng thời bản thân lập trình viên cũng phải có đủ kỹ năng lập trình ở cấp/bậc/mức thấp. Assembly là ngôn ngữ lập trình bậc thấp nhất hiện có, còn những cái tên bạn hay nghe nhiều như Java, PHP, JavaScript, Python... là ngôn ngữ bậc cao, che giấu nhiều chi tiết phức tạp của phần cứng để lập trình viên tập trung vào logic của chương trình. Các ngôn ngữ bậc cao có cú pháp rất gần với ngôn ngữ tự nhiên, tức là đọc hiểu như đọc sách, giúp người mới dễ dàng tiếp cận và học tập. Còn ngôn ngữ bậc trung như C hay C++ được coi là gần gũi với Assembly nhưng cũng có mức độ trừu tượng nhất định, tiện lợi hơn nhưng vẫn có giấu 1 số chi tiết phần cứng. Assembly cũng có hạn chế là khó học, được viết cho 1 kiến trúc phần cứng cụ thể và không thể chạy trên các kiến trúc khác.
Nói dông nói dài đặc điểm này cũng tương tự iOS/macOS của Apple. Một lý do mà các sản phẩm của công ty này vẫn chạy mượt mà dù cấu hình phần cứng không cao bằng Android hay Windows vì họ có thể thực hiện tối ưu phần mềm cấp thấp. Nguyên nhân chủ yếu do phần cứng bên Apple không "phân mảnh" nặng như Android và Windows. Trước khi một bản iOS mới ra đời, các kỹ sư Apple biết chắc chắn chúng sẽ chạy trên thiết bị nào với số nhân cụ thể là bao nhiêu, RAM bao nhiêu, ROM bao nhiêu... Nhưng với Google hay Microsoft thì điều này không thể nên sản phẩm của họ không đạt được sự tối ưu cao như Apple.
Có ai nghĩ DeepSeek là đi tìm kiếm (seek) dưới vực sâu (deep) để ra con đường mới không?
Quay lại DeepSeek, bài phân tích trên cũng nhận xét lý do tại sao công ty Trung Quốc này lại chọn con đường "gian khổ" hơn các đối thủ Mỹ. Đơn giản vì lệnh cấm xuất khẩu chip của chính phủ Mỹ đã đẩy người Trung Quốc vào thế phải tìm cách khác để tồn tại. Sau cùng họ đã chọn các công cụ như PTX nhằm khai thác triệt để nguồn sức mạnh ít ỏi từ những con chip "tàn tật" mà người Mỹ chịu bán. Dù sao thì, quest càng khó, điểm XP càng nhiều, phải không?