
Neural Engine là tên gọi của nhân xử lý trí tuệ nhân tạo trên các con chip của Apple. Trên chip của Samsung, Huawei thì họ gọi là Neural Processing Unit, Qualcomm thì đặt tên là Qualcomm AI Engine và nhân xử lý Hexagon… Ngày nay, nhân xử lý AI xuất hiện rất phổ biến trên nhiều chip di động và sắp tới là cả chip máy tính nữa để tối ưu cho các tác vụ trí tuệ nhân tạo như nhận diện gương mặt, nhận diện chữ viết, phân loại hình ảnh, tách chủ thể ra khỏi nền... Vì sao chúng ta lại cần chúng, chúng giúp gì được cho việc sử dụng thường ngày?
Neural Network hoạt động như thế nào?
Trước khi chúng ta đi vào các thứ rất là máy móc, hãy xem thử xem những tác vụ liên quan tới AI thì cần những phép tính như thế nào. AI là một lĩnh vực khá rộng, trong bài này chúng ta sẽ tập trung vào mảng machine learning và cụ thể là giải pháp sử dụng các mạng nơ-ron nhân tạo (neural network).

Lấy ví dụ về một tác vụ cần nhận diện chữ viết tay và chuyển nó thành văn bản. Trong quá trình này, có một đoạn bạn sẽ phải “đọc” hình ảnh. Giả sử mỗi hình ảnh của kí tự là một tấm hình 28 x 28 pixel chỉ có 2 màu đen trắng, thì như vậy nó sẽ được chuyển thể thành một vector với 784 chiều (28 x 28 = 784). Trong ảnh động bên dưới, để dễ nhìn thì chúng ta chỉ xem tấm ảnh là 3 x 3 = 9 chiều mà thôi.
Mạng nơ-ron được sử dụng trong bài toán này sẽ lấy các giá trị của vector nhiều chiều này và làm phép nhân với các tham số (parameter, có thể hiểu là những đặc trưng của dữ liệu để biểu thị cho sự khác nhau giữa số 8 với số 7, số 6, số 5). Sau khi nhân xong thì kết quả sẽ được cộng lại để tính toán ra kết quả trong cột “output” như ở hình dưới.

Nhìn vào ảnh động này, bạn có thể thấy rằng hình ảnh của số 8 được đưa vào một thuật toán nhận diện, nó sẽ được so sánh với các ảnh mẫu của số 7, số 8, số 9 (và nhiều số khác nữa) bằng phép nhân và phép cộng vector. Kết quả cuối cùng cho thấy ảnh chụp khớp với ảnh mẫu của số 8 nhất, nên máy dự đoán tấm ảnh này chính là số 8.
Các tác vụ AI có liên quan đến xử lý ảnh, xử lý âm thanh, xử lý ngôn ngữ tự nhiên… thường sẽ cần thực hiện rất nhiều phép cộng và phép nhân như thế này. Người ta thường tổ chức nó thành những phép nhân ma trận (tích ma trận), có thể bạn đã nghe tới nó khi học giải tích trong các môn toán đại cương rồi đấy.

Tóm lại, vấn đề cần giải quyết với máy tính đó là phải làm sao thực hiện các phép nhân ma trận rất lớn trong thời gian ngắn nhất có thể mà phải tiêu thụ ít điện (chứ không thôi máy hết pin, hoặc server thì phải trả nhiều tiền điện).
CPU hoạt động như thế nào?
CPU là một bộ xử lý có thể dùng cho nhiều tác vụ khác nhau, nó được tổ chức trong một sơ đồ như bên dưới (gọi là sơ đồ von Neumann, anh em học IT chắc đã từng nghe qua):

Lợi ích của CPU đó là nó đem lại tính linh hoạt rất cao. Nhờ kiến trúc Von Neumann, bạn có thể chạy gần như mọi loại ứng dụng, mọi loại phần mềm, phép tính trên một con CPU truyền thống. Bạn có thể dùng CPU để xử lý văn bản, để kiểm soát động cơ phản lực, để thực hiện giao dịch ngân hàng, hay thậm chí là dùng neural network chạy trên CPU để phân loại hình ảnh luôn cũng được.
Nhưng cũng vì CPU linh hoạt quá nên phần cứng của nó không biết chính xác nó cần làm gì ở bước tiếp theo. Nó phải đọc dữ liệu lệnh (instruction) từ phần mềm. Ngoài ra, CPU sẽ lưu kết quả tính toán của mình bên trong những bộ nhớ nhỏ nằm trong CPU (register hoặc cache) với từng phép tính một. Khi có một lượng lớn phép tính cần thực hiện trong thời gian ngắn, CPU sẽ gặp tình trạng “nghẽn cổ chai” (von Neumann Bottleneck) khi register không đủ lưu trữ thì nó phải lưu dữ liệu xuống cache, cache không đủ thì phải lưu tiếp xuống RAM, khiến quá trình truy xuất dữ liệu chậm đi.

Chưa hết, dù ngày nay các phép tính neural network vẫn có thể dự đoán được những buớc tiếp theo cần tính toán nhưng mỗi nhân số học (Arithmetic Logic Unit - ALU, là đơn vị kiểm soát phép tính nhân và cộng) nằm trong CPU sẽ thực hiện các phép tính này từng cái một theo tuần tự. Mà cứ xong một phép tính là lại phải truy cập bộ nhớ, khiến quá trình xử lý các neural network trở nên lâu hơn và tốn nhiều năng lượng hơn.
GPU hoạt động như thế nào?
Để thực hiện được nhiều phép tính hơn trong cùng một đơn vị thời gian, người ta sử dụng bộ xử lý đồ họa (GPU). GPU sử dụng một chiến thuật rất đơn giản: tăng số ALU lên thật nhiều. Một GPU hiện đại có thể có tới 2000 - 2500 ALU trong mỗi nhân xử lý, như vậy bạn có thể thực hiện hàng nghìn phép nhân và phép cộng cùng lúc.

Kiến trúc như thế này giúp GPU trở thành lựa chọn phù hợp trong những ứng dụng cần phải tính toán song song rất nhiều, ví dụ như phép nhân ma trận trong neural network. Đây cũng là lý do vì sao những người làm về AI thường đi tìm máy tính, server có GPU rời để họ có thể làm việc nhanh hơn. GPU cũng là thứ được dùng nhiều nhất cho việc xử lý machine learning tính đến thời điểm viết bài này.
Tuy nhiên, GPU thực chất vẫn là một bộ xử lý đa dụng, nó phải hỗ trợ cho rất nhiều kiểu phần mềm khác nhau và cũng sẽ xuất hiện vấn đề nghẽn cổ chai. Với mỗi phép tính của cả nghìn ALU, GPU vẫn cần phải truy cập bộ nhớ để đọc dữ liệu đầu vào và lưu trữ kết quả sau khi tính toán. Và bởi vì có cả nghìn ALU nên việc này trở nên hao điện hơn.
Các bộ xử lý trí tuệ nhân tạo hoạt động như thế nào?
Bộ xử lý AI được sinh ra chỉ để làm những thứ về AI. Nó không dùng để dựng hình ảnh, để đổ bóng, để vẽ hình học như GPU, nó không thể xử lý văn bản hay điều khiển tên lửa như CPU. Nó chỉ làm mỗi một thứ mà thôi, thế nên người ta thiết kế để chúng có thể chạy tốt các tác vụ về nhân ma trận ngay từ đầu, với tốc độ rất nhanh, tiêu thị ít năng lượng, và lại còn có kích thước nhỏ nữa.
Cái quan trọng đó là những nhân xử lý AI như Apple Neural Engine, Qualcomm AI Engine hay Samsung Nerual Processing Unit (NPU) giảm được đáng kể tình trạng nghẽn cổ chai von Neumann Bottleneck. Vì các con chip này được thiết kế để tính toán ma trận nên phần cứng của chip biết chính xác mọi phép toán cần thiết. Nó có thể thực hiện hàng nghìn phép nhân và phép cộng, rồi kết nối chúng trực tiếp với nhau ngay từ phần cứng. Kiến trúc này gọi là systolic array. Nhìn hình bên dưới, đây là cách tổ chức khi cần nhân 2 ma trận với nhau đấy.

Quá trình tính toán của các bộ xử lý AI khi đó sẽ diễn ra như sau: chúng sẽ lấy dữ liệu tham chiều từ RAM, chuyển vào trong một ma trận ALU để nhân và cộng. Sau đó, chip tiếp tục lấy dữ liệu để dự đoán từ bộ nhớ. Với mỗi phép nhân ma trận được thực hiện, kết quả sẽ được chuyển cho phép nhân tiếp theo song song với việc bắt đầu cộng kết quả lại. Kết quả của quá trình này là tổng của tất cả những phép nhân giữa dữ liệu cần dự đoán với dữ liệu tham chiếu.
Cả quá trình nói trên được thực hiện rất nhanh mà không cần lưu dữ liệu lên bộ nhớ trong mỗi lần tính toán, khi nào xong rồi mới ghi kết quả mà thôi. Như vậy tốc độ tăng lên đáng kể trong khi giảm được mức độ tiêu thụ năng lượng.
Apple không giải thích chi tiết về kiến trúc ma trận của Neural Engine, nên thôi lấy ví dụ về con chip AI của Google tên là TPU đi. Mỗi con Cloud TPU thế hệ thứ 2 của Google sử dụng 2 systolic array với kích thước 128 x 128, như vậy có tất cả 32.768 nhân ALU để thực hiện phép tính.
Tóm lại nhân AI giúp gì cho việc sử dụng thường ngày của chúng ta?
Hiện nay rất nhiều tính năng của điện thoại, hay của các app, đều cần đến AI hay cụ thể là phép nhân ma trận. Ví dụ:
- Tính năng nhận diện gương mặt Face ID trên iPhone
- Chức năng phân loại gương mặt trên app gallery của điện thoại Android
- Chức năng nhận diện cảnh chụp để điều chỉnh thông số ảnh cho đẹp hơn
- Tách chủ thể ra khỏi nền để xóa phông mạnh hơn
- Tự động phân tích từng pixel để tăng độ sáng, tăng độ tương phản, hoặc tăng độ nét (như Deep Fusion)
- Tự động áp dụng Smart HDR cho các cảnh ngoài trời, ảnh phong cảnh
- ….
Tất cả đều dùng đến mạng nơ-ron nhân tạo, đặc biệt là các chức năng về camera trên những con điện thoại hiện đại.

Thế nên các nhà sản xuất chip mới tích hợp nhân AI lên bộ xử lý của các điện thoại là vậy. Hiện nay một số con CPU Intel mới cũng có nhân AI dành cho máy tính, hay chip Apple M1 cũng tích hợp Nerual Engine để dùng trên MacBook, Mac Mini…
Với sự xuất hiện của nhân AI riêng, các tính năng nói trên sẽ chạy nhanh hơn, tốn ít điện hơn (tức thời gian dùng pin lâu hơn), tỏa nhiệt ít hơn.
Để hỗ trợ cho những ứng dụng bên thứ 3 cũng có thể khai thác được nhân AI triệt để, Apple cung cấp bộ khung lập trình CoreML cho app iOS, còn Android thì ML Kit vào một số giải pháp khác. Khi được lập trình bằng những công cụ nói trên, hệ điều hành sẽ biết và chuyển sang dùng nhân AI khi cần.

Không phải lúc nào nhân AI cũng được sử dụng
Nhân AI dùng cho việc tính toán AI là đúng rồi, nhưng cả khi các ứng dụng thực hiện những tác vụ AI thì máy vẫn có thể chuyển đổi giữa việc dùng CPU, GPU hoặc nhân AI tùy tác vụ.
Ví dụ, với Neural Engine của Apple, có những tác vụ sử dụng mạng nơ-ron dạng RNN sẽ không được xử lý bằng Neural Engine mà chuyển sang dùng GPU. Có vẻ như Apple chưa lập trình để Neural Engine biết cách xử lý RNN như thế nào. Việc này lập trình viên không thể kiểm soát, iOS sẽ kiểm soát và bạn không có cách nào “ép” sử dụng Neural Engine cả, trừ việc bạn khai báo trong app của mình rằng bạn “ưu tiên” dùng Neural Engine khi có thể. Bạn có thể xem thêm ở link github này.
Với Android thì mình không tìm được nhiều tài liệu để nói về vụ này, nên anh em nào biết thì chia sẻ thêm nhé.
Xong, hi vọng anh em có thêm nhiều kiến thức hữu ích trong thế giới công nghệ, và biết được cái điện thoại, cái máy tính của mình nó chạy như thế nào.