- Đội ngũ Google AI Edge tập trung vào việc đưa các mô hình AI, đặc biệt là Gemma, đến các thiết bị biên (
edge devices) để nâng cao trải nghiệm người dùng, bảo mật quyền riêng tư và tối ưu chi phí. - Hai xu hướng chính trong AI tạo sinh trên thiết bị là System-level GenAI (mô hình lớn tích hợp vào hệ điều hành) và In-app GenAI (mô hình nhỏ được tinh chỉnh cho ứng dụng cụ thể với phạm vi tiếp cận rộng hơn).
- Các mô hình Gemma 4 mới (E2B, E4B) được tối ưu hóa cho thiết bị biên, tích hợp khả năng gọi hàm và suy luận để phát triển kỹ năng tác nhân trên thiết bị, hỗ trợ đa phương thức và có giấy phép Apache 2.0.
TLMs: Tiny LLMs and Agents on Edge Devices with LiteRT-LM — Cormac Brick, Google
- Ưu tiên AI biên cho các ứng dụng nhạy cảm: Triển khai mô hình trên thiết bị biên giúp cải thiện đáng kể độ trễ (latency), tăng cường quyền riêng tư bằng cách giữ dữ liệu cục bộ và giảm chi phí vận hành so với dịch vụ đám mây.
- Sử dụng bộ công cụ AI đa nền tảng của Google: Tận dụng MediaPipe, Lighter TLM và Lighter T để triển khai một tệp mô hình duy nhất (.tf_light) trên nhiều nền tảng như Android, iOS, Linux, Windows, web và thiết bị IoT (CPU/GPU).
- Phân biệt chiến lược triển khai System-level và In-app GenAI: Đối với các mô hình lớn, tổng quát (2-5 tỷ tham số), hướng tới tích hợp cấp hệ thống (ví dụ: AI core của Android). Với các mô hình nhỏ hơn, chuyên biệt (100-500 triệu tham số), ưu tiên triển khai trong ứng dụng.
- Tinh chỉnh mô hình nhỏ để đạt độ tin cậy sản phẩm: Đối với In-app GenAI, việc tinh chỉnh (
fine-tune) các mô hình ngôn ngữ siêu nhỏ (tiny LLMs) dưới 500 triệu tham số là cần thiết để đạt được hiệu suất đáng tin cậy cho các tác vụ cụ thể như tóm tắt hoặc gọi hàm. - Khai thác Gemma 4 cho kỹ năng tác nhân tiên tiến: Các mô hình Gemma 4 E2B và E4B tích hợp tính năng gọi hàm (
function calling) và suy luận (thinking), mở khóa khả năng phát triển các kỹ năng tác nhân phức tạp và đa phương thức ngay trên thiết bị. - Tối ưu hóa RAM và tận dụng bộ tăng tốc phần cứng: Khi triển khai, cần xem xét yêu cầu về RAM của mô hình (ví dụ: Gemma E2B/E4B) và ưu tiên sử dụng các bộ tăng tốc phần cứng như GPU hoặc NPU để đạt hiệu suất suy luận tối ưu trên thiết bị biên.
- Sử dụng giấy phép Apache 2.0 của Gemma: Việc các mô hình Gemma được phát hành với giấy phép Apache 2.0 tiêu chuẩn giúp dễ dàng áp dụng và tích hợp vào nhiều dự án và sản phẩm hơn.
- AI edge — AI biên
- model — mô hình
- edge devices — thiết bị biên
- NPU (Neural Processing Unit) — Bộ xử lý thần kinh
- tiny LLMs — Mô hình Ngôn ngữ Lớn siêu nhỏ
- agent skills — kỹ năng Tác nhân
- latency — độ trễ
- privacy — quyền riêng tư
- fine-tune — tinh chỉnh
- Function calling — Gọi hàm
- Multimodal models — mô hình đa phương thức
- token — mã thông báo
Giới thiệu về Google AI Edge và Trọng tâm Thảo luận
Xin chào, tôi là Cormbrick. Tôi làm việc trong nhóm Google AI edge, một giải pháp giúp đưa các mô hình đến edge devices. Đây là công cụ chúng tôi sử dụng nội bộ cho các sản phẩm của mình và cũng cung cấp dưới dạng sản phẩm mã nguồn mở. Là một phần của công việc này, chúng tôi hợp tác rất chặt chẽ với nhóm Gemma vì họ xuất bản nhiều mô hình nhắm mục tiêu đến các edge devices.
Về bản thân tôi, tôi đã tập trung vào Edge AI trong khoảng mười năm qua. Tôi bắt đầu vào năm 2016 bằng việc chạy Google Net trên một bộ tăng tốc phần cứng USB key được cắm vào Raspberry Pi tại Nurips 2016. Sau đó, tôi gia nhập Intel và lãnh đạo kiến trúc cho NPU được tích hợp vào tất cả các máy tính xách tay của họ ngày nay. Ba năm trước, tôi chuyển đến Google để làm tech lead cho Edge AI tại đây. Tôi rất vui được chia sẻ những gì chúng tôi đang làm và cung cấp cái nhìn tổng quan về tình hình AI trên thiết bị di động hiện nay, bao gồm trạng thái công nghệ hiện tại và các mô hình triển khai mô hình khác nhau. Hai điều tôi muốn tập trung vào trong buổi nói chuyện này là tiny LLMs (các Mô hình Ngôn ngữ Lớn rất nhỏ) và agent skills (các kỹ năng của Tác nhân). tiny LLMs là những mô hình rất nhỏ, trong khi agent skills hiện đã có thể thực hiện trên thiết bị với các mô hình lớn hơn, và chúng cần thiết để các mô hình này hoạt động trôi chảy trên thiết bị. Cả hai đều là những hướng đi mới đầy thú vị, chỉ mới trở thành hiện thực gần đây. Gần đây nhất là tuần trước, khi chúng tôi ra mắt Gemma 4 cùng với nhóm DeepMind, chúng tôi đã hỗ trợ họ bằng một ứng dụng Android và iOS đã mở ra những khả năng mới cho những gì chúng ta có thể làm trên thiết bị di động. Chúng ta sẽ đi sâu vào đó, cũng như khám phá các loại công việc có thể thực hiện với tiny models. Đó là hai phần chính của bài thuyết trình.
Tổng quan về AI trên Edge và Mô hình Gemma
Tôi sẽ bắt đầu bằng cách tổng quan về AI trên edge, xem xét các small language models (mô hình ngôn ngữ nhỏ) và tiny language models (mô hình ngôn ngữ siêu nhỏ). Sau đó, chúng ta sẽ xem xét các mô hình Gemma, vì đây là một chủ đề khá thời sự, và các loại hiệu suất mà chúng tôi đạt được với các mô hình Gemma trên các loại edge devices khác nhau, vì đây là trọng tâm công việc của nhóm chúng tôi.
Tiếp theo, chúng ta sẽ xem xét agent skills mà chúng tôi xây dựng dựa trên thế hệ mô hình Gemma mới nhất, có thể chạy trên cả Android và iOS, cũng như nhiều nền tảng khác. Nửa sau của buổi nói chuyện, chúng ta sẽ đi sâu vào tiny models: cách bạn có thể fine-tune (tinh chỉnh) và triển khai một tiny model lên edge devices. Cuối cùng, tôi sẽ giới thiệu một ứng dụng thực tế mà nhóm chúng tôi đã xây dựng, không chỉ là một ứng dụng minh họa, sử dụng các tiny LLMs dựa trên công nghệ Gemma.
Lợi ích của Edge AI
Đối với những người đã có mặt tại đây, có lẽ các bạn đã quan tâm đến Edge AI và điều này không cần phải nói thêm, nhưng thực sự có rất nhiều lợi ích khi chạy mô hình trên edge. Có những cải tiến về độ trễ (latency) hoặc trải nghiệm người dùng (UX) cho một số tác vụ rất nhạy cảm trong Agent Loop (chu trình hoạt động của Tác nhân), ví dụ như dịch giọng nói trực tiếp. Đây là tính năng mà nhóm chúng tôi đã triển khai trên Pixel vào năm ngoái, cho phép dịch giọng nói trực tiếp. Việc thực hiện tác vụ này với độ trễ yêu cầu bằng dịch vụ đám mây là rất thách thức. Do đó, khả năng thực hiện offline và trên edge là yếu tố then chốt để đáp ứng yêu cầu về độ trễ và trải nghiệm người dùng.
Quyền riêng tư (privacy) cũng là một yếu tố quan trọng. Ví dụ, mọi người sử dụng Trí tuệ nhân tạo trong các ứng dụng nhắn tin và họ muốn tin nhắn của mình được giữ nguyên trên điện thoại, được mã hóa hoàn toàn riêng tư. Đó là một ví dụ điển hình về nơi chúng ta đang thấy LLMs được triển khai để hỗ trợ các trường hợp sử dụng mà quyền riêng tư là rất quan trọng.
Sử dụng offline thì khá rõ ràng, và sau đó là tiết kiệm chi phí (savings). Chúng tôi nhận thấy điều này ngày càng trở nên phù hợp với người dùng máy tính xách tay, nơi có xu hướng mọi người thử nghiệm các small language models để thực hiện một số loại mã thông báo mà họ có thể thực hiện với agentic workflow trên máy tính để bàn. Vì vậy, một số người cũng quan tâm đến việc tiết kiệm chi phí.
Công nghệ Google Edge AI và Khả năng Triển khai Đa Nền tảng
Đội ngũ của chúng tôi tập trung vào việc giúp mọi người xây dựng ứng dụng. Chúng tôi cung cấp MediaPipe, Lighter TLM (một LLM runtime hoạt động trên thiết bị di động và edge), và Lighter T (một framework suy luận tiêu chuẩn, trước đây gọi là TensorFlow Lite). Những công nghệ này đã được sử dụng rộng rãi trong nhiều năm, ví dụ như trong Google Photos, YouTube Shorts (nếu bạn đã từng dùng các hiệu ứng vui nhộn trong YouTube Shorts, đó là những gì nhóm chúng tôi đã xây dựng cùng với nhóm YouTube, sử dụng MediaPipe và nhiều mô hình deep learning tracking bên dưới). Tất cả đều được xây dựng trên cùng công nghệ MediaPipe và Lighter T.
Ngày nay, công nghệ này chạy trên tất cả các điện thoại Android như một phần của dịch vụ hệ thống, hoặc các ứng dụng bên thứ ba xây dựng trên một phiên bản của stack được tích hợp sẵn trong Android. Tuy nhiên, stack của chúng tôi còn chạy xa hơn Android rất nhiều. Mặc dù nó có sẵn như một dịch vụ hệ thống trong Android, bạn cũng có thể lấy cùng một tệp TF light và triển khai nó lên iOS, macOS, Linux, Windows, web hoặc các IoT devices từ cùng một tệp đó. Đây là lý do tại sao việc triển khai rất hữu ích. Một lưu ý nhỏ là tệp này triển khai trên CPU và GPU. Đối với NPU, chúng tôi cần thực hiện một số biên dịch đặc biệt và bạn sẽ nhận được một tệp NPU riêng. Tuy nhiên, ngay cả với các mô hình Gemma mà chúng tôi đã xuất bản tuần trước, một tệp duy nhất có thể hoạt động trên CPU và GPU trên nhiều loại thiết bị.
Một số xu hướng mà chúng tôi đang thấy đối với LLMs trên thiết bị bao gồm các giải pháp tập trung vào quyền riêng tư, voice agents (tác nhân giọng nói) và local agents (tác nhân cục bộ) với tool calling (gọi công cụ) là một workflow rất phổ biến. Trong stack của chúng tôi, Lighter TLM là công nghệ mà chúng ta sẽ tìm hiểu kỹ hơn sau này, giúp chúng tôi chạy các tiny LLMs trên thiết bị đa nền tảng một cách nhanh chóng vì chúng tôi hỗ trợ tất cả các bộ tăng tốc phần cứng khác nhau.
Hai Xu hướng Chính trong Triển khai Generative AI trên Thiết bị
Một khái niệm quan trọng là chúng ta đang chứng kiến hai xu hướng lớn hiện nay.
1. Generative AI Cấp Hệ thống (System-level GenAI)
Đối với các mô hình rất lớn, cách chúng xuất hiện trên điện thoại di động không phải là mỗi khi bạn khởi chạy một ứng dụng, nó sẽ tải xuống một mô hình bốn tỷ tham số chỉ để giúp bạn tìm một nhà hàng ngon. Thay vào đó, xu hướng là xây dựng các mô hình lớn hơn vào trong hệ điều hành (OS). Chúng tôi gọi đây là system-level GenAI. Các mô hình này thường có khoảng hai đến năm tỷ tham số, tùy thuộc vào hệ điều hành và các yếu tố khác. Đây là lựa chọn mà chúng tôi thấy cả nhóm Android (mà chúng tôi hợp tác chặt chẽ) và nhóm Apple Intelligence đều đang thực hiện các lựa chọn tương tự, nơi có một mô hình trung tâm được tích hợp sẵn. Ví dụ, trên Android, nó được gọi là AI core, và có các API tóm tắt (summarization APIs) cùng với một bộ API ngày càng tăng cho nhà phát triển, bao gồm cả prompt API mà bạn có thể sử dụng. API này có sẵn trên các thiết bị Android cao cấp và các thiết bị Apple cao cấp (hoặc rõ ràng Apple có Apple Intelligence của riêng họ). Tuy nhiên, về mặt xu hướng, điều này rất quan trọng. Nếu bạn muốn tận dụng một mô hình được tích hợp sẵn, đây là một cách tuyệt vời để làm điều đó.
2. Generative AI Trong Ứng dụng (In-app GenAI)
Xu hướng khác mà chúng ta thấy là in-app GenAI, nơi các tiny LLMs hoặc TLMs (như chúng tôi gọi trong bài thuyết trình này) trở nên phù hợp hơn. System GenAI thường được tùy chỉnh thông qua lời nhắc hoặc kỹ năng (như chúng ta sẽ thấy sau này) và là một mô hình nền tảng được tải sẵn trên thiết bị. In-app GenAI thường được tùy chỉnh cho các tác vụ cụ thể, được tải cùng với ứng dụng hoặc trang web. Chúng tôi cũng triển khai một số mô hình này trên web, và chúng thường nhắm đến phạm vi tiếp cận rộng hơn. Điều này có nghĩa là chúng có thể hoạt động không chỉ trên các thiết bị cao cấp mà còn trên tất cả các thiết bị, vì phạm vi tiếp cận của ứng dụng rất quan trọng đối với nhiều nhóm phát triển ứng dụng mà chúng tôi làm việc.
Điều đáng ngạc nhiên là bạn có thể đạt được hiệu suất rất mạnh mẽ từ các LLMs nếu bạn fine-tune chúng cho một tác vụ duy nhất, ví dụ như các tác vụ đơn giản như tóm tắt, phiên âm, hoặc các tác vụ voice-to-action. Chúng tôi có thể đạt được hiệu suất rất đáng tin cậy từ các mô hình trong khoảng 100 đến 500 triệu tham số, tùy thuộc vào độ phức tạp của tác vụ.
Một ví dụ điển hình là chúng tôi đã ra mắt Function Gemma vào tháng 12, một mô hình 270 triệu tham số chuyên dụng cho function calling. Chúng tôi đã có thể chứng minh rằng việc thực hiện voice-to-function calling cho 10 function khác nhau có liên quan đến các nhà phát triển Android, và trong các eVals nội bộ của chúng tôi, nó đã đạt độ tin cậy từ 85 đến 90% chỉ bằng cách sử dụng mô hình rất nhỏ này. Mô hình này có thể triển khai rộng rãi cho các thiết bị iOS và Android, và bạn thực sự có thể thử nghiệm nó trong một ứng dụng mẫu mà chúng ta sẽ xem xét kỹ hơn sau này. Đó là một ví dụ về việc sử dụng tiny LLM.
Chúng tôi đang thấy các nhóm phát triển ứng dụng ngày càng quan tâm đến việc fine-tune các mô hình để triển khai dưới dạng in-app GenAI. Sự khác biệt ở đây là, bên trái (system GenAI), việc tùy chỉnh thông qua lời nhắc hoặc kỹ năng. Còn bên phải (in-app GenAI), chúng tôi khuyến khích mọi người thực hiện một mức độ fine-tuning nhất định để một tiny LLM hoạt động hiệu quả trong thực tế. Chắc chắn là đối với các mô hình dưới 500 triệu tham số, điều này đúng. Có lẽ đối với các mô hình 500 triệu tham số trở lên, chúng ta có thể thực hiện các tác vụ tổng quát hơn. Nhưng đối với các mô hình thực sự nhỏ, chắc chắn dưới 500 triệu, theo kinh nghiệm của chúng tôi, bạn cần phải fine-tune để đạt được độ tin cậy ở cấp độ sản phẩm.
Giới thiệu Gemma 4: Kích thước và Tối ưu hóa RAM
Bây giờ tôi sẽ nói về Gemma 4. Các mô hình Gemma 4 được ra mắt tuần trước thuộc vào loại system GenAI candidate. Chúng ta có thể làm nhiều điều mạnh mẽ với Gemma 4, như bạn sẽ thấy.
Trước tiên, chúng ta sẽ nói về kích thước. Có hai kích thước nhỏ là E2B và E4B. E2B được gọi như vậy vì nó chỉ cần khoảng hai tỷ tham số có mặt trong RAM để chạy mô hình, bởi vì một trong những yếu tố hạn chế mà chúng ta thấy với các mô hình này là lượng RAM bạn cần có trong thiết bị để chạy nó một cách đáng tin cậy. E4B đã được tối ưu hóa để chạy với bốn tỷ tham số trên thiết bị. Có nhiều tham số hơn được mô hình sử dụng, nhưng các tham số khác mà mô hình sử dụng là... (nhóm DeepMind có các bài nói chuyện về điều này sau trong tuần, bạn có thể tìm hiểu thêm chi tiết ở đó). Nhưng tóm lại, các tham số khác trong mô hình được sử dụng cho các per-layer embeddings. Trong runtime của chúng tôi, chúng tôi không thực sự cần tải tất cả các tham số đó. Chúng tôi cần duy trì chúng như 2B và 4B, chúng cần phải luôn nằm trong RAM. Những tham số khác, chúng tôi thường memory map chúng và chúng tôi chỉ cần tải một dòng của bảng embedding per-layer và bảng embedding một lần trong auto-regressive loop. Thực tế, chúng tôi chỉ cần tải vài trăm hoặc vài nghìn byte của nó để thực hiện next token inference.
Tối ưu hóa Mô hình và Nền tảng
Khi thực hiện suy luận, bạn không bao giờ cần phải tải toàn bộ bảng PLE vào bộ nhớ. Sau đó, tùy thuộc vào hệ điều hành, nó sẽ thực hiện khá tốt việc loại bỏ bộ nhớ được sử dụng bởi các mã thông báo PLE cũ hơn. Đó là lý do tại sao chúng tôi có ý tưởng về hiệu quả. Các mô hình nhỏ hơn chạy trên, như bạn có thể thấy ở bên phải, nhiều nền tảng khác nhau, bao gồm các mô hình E2B và E4B. Các mô hình này nằm trong lộ trình của AI core. Các mô hình này hiện có sẵn để thử nghiệm. Vào một thời điểm thích hợp trong tương lai, đội ngũ Android sẽ tích hợp chúng vào AI core và chúng sẽ có sẵn rộng rãi hơn trên nhiều loại thiết bị. Ngoài ra, sẽ có một buổi nói chuyện khác vào tuần tới, hoặc một buổi nói chuyện trong tuần này từ Olli của đội AI core, người có thể chia sẻ thêm chi tiết về lộ trình đó trông như thế nào. Và cũng có Omar từ đội GDM sẽ đi sâu hơn vào toàn bộ thế giới Gemma. Hai mô hình cuối cùng, chỉ để tham khảo, cũng liên quan đến biên, nhưng không phải là trọng tâm của buổi nói chuyện của tôi hôm nay. Vì những mô hình này phù hợp để mọi người chạy trên máy tính xách tay. Kích thước đã được tối ưu hóa để chạy thực sự tốt trên máy tính xách tay tiêu dùng, mặc dù là những máy tính xách tay có thể có 32 gigabyte RAM. Nhưng đó là những gì các mô hình này hướng tới. Vì vậy, tôi sẽ ít tập trung vào hai mô hình này, mặc dù chúng rất mạnh mẽ và hữu ích. Chắc chắn, mô hình E4B, cũng như mô hình E2B, đều có hiệu suất xuất sắc trên nhiều khía cạnh về tri thức và suy luận. Một trong những cải tiến lớn so với thế hệ trước, từ góc độ người dùng mô hình, là chúng đã tích hợp tính năng gọi hàm (function calling), điều này rất tuyệt vời, và chúng cũng có tính năng suy luận (thinking) tích hợp. Sự kết hợp giữa suy luận và gọi hàm này là thứ mở khóa khả năng của chúng tôi để thực hiện các kỹ năng trên thiết bị. Như bạn sẽ thấy trong giây lát, chúng ta có thể mô tả một kỹ năng, cung cấp cho mô hình, và mô hình có thể tự động tiếp nhận và sử dụng nó. Điều này cho phép chúng tôi sử dụng mô hình đó, vốn đã trở nên rất phổ biến trong vài tháng qua, để đưa mô hình đó lên thiết bị di động, tạo ra những loại trải nghiệm di động mới. Ngoài ra, đối với E2B và E4B, đây là các mô hình đa phương thức (multimodal), nghĩa là chúng hỗ trợ âm thanh, hình ảnh và văn bản. Các mô hình lớn hơn chỉ hỗ trợ hình ảnh và văn bản. À, một thay đổi khác từ góc độ triển khai là đây là lần đầu tiên các mô hình Gemma được phát hành với giấy phép Apache 2.0 tiêu chuẩn, nghĩa là chúng dễ sử dụng hơn cho nhiều người hơn. Một lần nữa, bạn sẽ nghe thêm về điều này trong buổi nói chuyện của Omar. Tôi chỉ muốn đề cập ở đây.
Gemma trên Môi trường Chạy và Nền tảng của Chúng tôi
Vậy đó là Gemma nói chung. Bây giờ, chúng ta sẽ đi sâu vào Gemma trên môi trường chạy và nền tảng của chúng tôi. Vâng, bức tranh tương tự như trước đây: chúng tôi có một tệp TLM nhẹ duy nhất, là một tệp Lite Runtime chứa các thứ như bộ mã hóa từ vựng và các thứ khác mà chúng tôi cần trong một gói để chạy một mô hình. Mô hình duy nhất đó chạy trên tất cả các loại thiết bị này, bao gồm di động, máy tính để bàn và nhúng. Và chúng tôi thực sự rất hào hứng khi làm nhiều hơn trong không gian thiết bị nhúng. Đặc biệt với đầu vào hình ảnh, có rất nhiều tiềm năng cho các trường hợp sử dụng IoT mới.
Hiệu suất của Mô hình
Đây là một biểu đồ khá chi tiết, nhưng chỉ để đi sâu vào hiệu suất. Tôi muốn nói rằng đây là một ảnh chụp nhanh tính đến hôm nay. Đây là điều mà chúng tôi tiếp tục phát triển, cả bản thân chúng tôi, đội ngũ của chúng tôi, và cả với các đối tác khác nhau mà chúng tôi có, như Intel, đội ngũ Raspberry Pi và đội ngũ Qualcomm. Chúng tôi tiếp tục tối ưu hóa tất cả các con số này. Nhưng chúng ta có thể thấy rằng, đối với mô hình 2 tỷ tham số, chúng ta có thể đạt được hiệu suất thực sự hấp dẫn trên một chiếc điện thoại Android cao cấp, có thể xử lý hàng nghìn mã thông báo mỗi giây trên một GPU, cũng như hàng nghìn mã thông báo mỗi giây trên MacBook. Nhưng hai hàng cuối cùng là trên Raspberry Pi, chúng ta có thể đạt khoảng 133 mã thông báo mỗi giây, đủ để thực hiện các trường hợp sử dụng phân tích hình ảnh đơn giản với độ trễ hợp lý. Và dòng cuối cùng là chúng tôi đang chạy trên một bộ tăng tốc phần cứng. Đây là một nền tảng phát triển robot IoT của Qualcomm mà họ có sẵn, và ở đó chúng tôi cũng có thể thấy hiệu suất khá hấp dẫn vì chúng tôi đã sử dụng NPU, mang lại hiệu suất tốt hơn nhiều. Và sau đó, bạn có thể tưởng tượng, chúng tôi có hiệu suất tương ứng trên mô hình E4B, hoạt động trên nhiều loại thiết bị với hiệu suất điền trước và giải mã ít hơn theo tỷ lệ, đúng không? Với kích thước và số lượng tham số mà chúng ta cần tìm nạp. Nhưng nhìn chung, chúng có sẵn trên rất nhiều nền tảng.
Khả năng của Mô hình: Kỹ năng Tác nhân trên Thiết bị
Vậy, chúng ta có thể làm gì với những mô hình đó? Rất nhiều điều. Một trong những điều tôi muốn nói thêm vì nó hoàn toàn mới, thay vì chỉ cho bạn xem phân tích hình ảnh, chuyển giọng nói thành văn bản hoặc dịch âm thanh, là có rất nhiều điều chúng tôi đã có thể làm với các mô hình từ góc độ của tôi trong một thời gian, mà các mô hình Gemma 4 tốt hơn nhiều so với các phiên bản tiền nhiệm. Nhưng điều mới mẻ nhất từ góc độ của tôi là các kỹ năng tác nhân trên thiết bị. Vì vậy, chúng tôi có một ứng dụng, tôi không biết các bạn đã thấy chưa, nó có sẵn trên cả iOS và Android, được gọi là Google AI Gallery. Và ứng dụng này cho phép bạn thực hiện nhiều điều khác nhau, như thực hiện các cuộc trò chuyện AI cơ bản, hỏi về một hình ảnh, hoặc thực hiện các trường hợp sử dụng chuyển giọng nói thành văn bản hoặc dịch bắt đầu từ âm thanh, hoặc các trường hợp sử dụng chuyển âm thanh thành gọi hàm. Nhưng cái mà tôi sẽ đi sâu hơn hôm nay là kỹ năng tác nhân, cái thứ hai từ bên trái.
Hy vọng điều này sẽ chạy. [transcript bị gián đoạn]
Demo Ứng dụng Kỹ năng Tác nhân
Chào buổi sáng. Hãy ghi một mục nhật ký tâm trạng mới với trường học. Vì cái này đang phát, nhưng âm thanh không hoạt động. Tôi đã ngủ đủ tám tiếng và mong chờ được đi chơi với Amy hôm nay. Đây là một ứng dụng kỹ năng nhật ký mà chúng ta đang xem ở đây. Hoặc một công cụ theo dõi tâm trạng nơi bạn ghi lại tâm trạng và giấc ngủ. Và sau đó hoàn hảo phân tích xu hướng tâm trạng của tôi trong bảy ngày qua.
Vậy, điều đang xảy ra ở đây là với ứng dụng theo dõi tâm trạng, nó ghi lại tâm trạng hoặc các quan sát của bạn vào nhật ký, và sau đó LLM có thể quay lại và tóm tắt nội dung mà bạn đã kiểm tra lịch của tôi.
Điều thú vị ở đây là đây chỉ là danh sách có dấu đầu dòng.
Được rồi, tôi sẽ không lặp lại điều này nữa. Điều thú vị ở đây là cách thực hiện điều này, mà chúng ta sẽ xem chi tiết hơn. Đây không phải là một tinh chỉnh tùy chỉnh. Chỉ đơn giản là chúng tôi cung cấp một kỹ năng cụ thể với một chút JavaScript mà mô hình có thể gọi cho mô hình, và sau đó thông qua giao diện văn bản tự do, bạn có thể, mô hình có thể sử dụng và tiếp nhận kỹ năng đó. Vì vậy, nó cũng có thể gọi hai kỹ năng thực sự đang diễn ra ở đây. Một là kỹ năng theo dõi tâm trạng, và cái kia là kỹ năng kiểm tra Wikipedia để biết thông tin mới nhất. Cái kia là kỹ năng bản đồ và bây giờ nó đang sử dụng kỹ năng truy vấn Wikipedia ở đây để tìm kiếm thông tin mới nhất từ giải Oscar. Vì vậy, thay vì có một mô hình chỉ bị giới hạn về thời gian, giờ đây việc mở rộng mô hình bằng các kỹ năng như tra cứu bản đồ, một cái gì đó như nhật ký tương tác mà bạn có thể thêm và bớt các mục từ giọng nói cũng như truy vấn, và cũng như thêm kiến thức hiện đại hơn hoặc kiến thức liên quan, trở nên thực sự dễ dàng. Vì vậy, chúng tôi đang trình diễn liệu bạn có thể ghép sự rung cảm này với chúng tôi đang trình diễn Wikipedia trong trường hợp này. Ồ, đây là một kỹ năng thú vị khác mà ai đó trong nhóm cũng đã phát triển là kỹ năng âm nhạc tâm trạng, nó gọi một dịch vụ web để sáng tác nhạc dựa trên một hình ảnh duy nhất và phát nó. Vì vậy, vâng, nó có thể sáng tác một số nhạc lo-fi để đi kèm với bữa sáng của một người dùng, nhưng đó là một mô hình mới, một mô hình mới về cách chúng ta có thể thực sự, thực sự, thực sự dễ dàng mở rộng các mô hình và làm điều đó theo một cách ít mã (low-code) như bạn cũng sẽ thấy một chút khi chúng ta đi sâu vào cách hoạt động của nó dưới lớp vỏ.
Các Trường hợp Sử dụng và Cách Xây dựng Kỹ năng
Vâng, các ví dụ ở đây, và tôi sẽ không phát tất cả các video này, có thể để tiết kiệm thời gian vì tôi nghĩ bạn đã thấy nhiều trong số đó. Một là chúng ta có thể bổ sung cơ sở tri thức là một mô hình mà chúng ta thấy thú vị. Chúng ta có thể tạo ra nội dung tương tác phong phú như thẻ học (flashcards) để hình ảnh hóa. Và tôi, vâng, nơi chúng ta có thể, thay vì nếu bạn yêu cầu tóm tắt một cái gì đó trong ba gạch đầu dòng, bạn có thể có một kỹ năng JavaScript để hiển thị các gạch đầu dòng đó dưới dạng một thẻ. Vì vậy, bạn chỉ cần nói "tóm tắt và hiển thị một thẻ" hoặc "tóm tắt cái này", và nếu nó nghĩ rằng hiển thị thẻ sẽ hữu ích hơn cho người dùng, điều đó sẽ được sử dụng, hoặc tổng hợp âm nhạc. Được rồi, tôi sẽ bỏ qua một chút từ các bản demo đến cách chúng tôi xây dựng chúng.
Cách Xây dựng Kỹ năng Hiệu quả và Truy cập Công cụ
Vậy điều thực sự đang xảy ra là cách chúng tôi xây dựng các kỹ năng là chúng rất hiệu quả. Vì vậy, các hướng dẫn có thể được tải theo yêu cầu. Điều này sử dụng một nguyên tắc mà bạn có thể đã thấy ở nơi khác về việc tiết lộ dần dần có điều kiện hoặc độ sâu có điều kiện. Vì vậy, thay vì trong một quy trình làm việc MCP nơi bạn cần mô tả mọi thứ về tất cả các hàm mà bạn cần, cách chúng tôi cấu trúc các kỹ năng là có một mô tả một dòng. Các mô tả một dòng của các kỹ năng là những gì tác nhân nhìn thấy, và sau đó nếu nó nghĩ rằng điều đó nghe có vẻ thú vị, thì nó sẽ yêu cầu thêm. Nó yêu cầu tải kỹ năng. Nó có một kỹ năng mà chúng tôi dạy nó để tải một kỹ năng. Và sau đó nó đi vào và tải kỹ năng và tìm ra tất cả các chi tiết về cách sử dụng nó, các gọi hàm nào nó có thể sử dụng để thực hiện kỹ năng đó. Mô hình này đặc biệt quan trọng đối với hiệu quả mã thông báo và thành thật mà nói là độ tin cậy trên các mô hình biên, bởi vì nếu chúng ta phải tải tất cả các chi tiết cho tất cả các kỹ năng vào mô hình biên, đó sẽ là rất nhiều ngữ cảnh để mô hình suy luận, và trong một mô hình nhẹ hơn, điều đó cuối cùng sẽ làm giảm hiệu suất, đúng không? Bởi vì các mô hình nhẹ hơn rất tuyệt vời để chạy trên thiết bị, nhưng về khả năng suy luận trên các cửa sổ ngữ cảnh rất, rất dài. Nếu bạn có thể có một cửa sổ ngữ cảnh cô đọng hơn, điều đó sẽ nâng cao "tỷ lệ thành công" của bạn về các số liệu chất lượng mà bạn đang xem xét để phát hành một ứng dụng cụ thể.
Phần thứ hai là truy cập công cụ. Nó giúp chúng tôi tích hợp các công cụ mới một cách động. Vì vậy, những thứ như, chúng tôi nghĩ về chúng theo cách có một tập hợp các công cụ đầu vào như làm thế nào để có thêm thông tin, đó có thể là Wikipedia hoặc tra cứu một dịch vụ thời tiết hoặc một cái gì đó tương tự. Sau đó có một tập hợp các điều hữu ích để trình bày đầu ra mới cho người dùng như hiển thị một cái gì đó trên bản đồ hoặc hiển thị một cái gì đó qua thẻ. Vì vậy, bạn có thể có các kỹ năng để mở rộng cả đầu vào và đầu ra, các mô hình đầu ra mà một mô hình có thể thực hiện. Và cũng giúp chúng tôi đưa vào các cơ sở tri thức chuyên biệt theo lĩnh vực. Vì vậy, kỹ năng đang gọi Wikipedia đó, bạn có thể dễ dàng tưởng tượng nó gọi một CRM nội bộ của khách hàng hoặc hỏi dữ liệu từ một hệ thống RAG cục bộ.
Cấu trúc và Hỗ trợ Kỹ năng
Trong cấu trúc các kỹ năng của chúng tôi, chúng tôi có tệp skill.md, và tùy chọn đi kèm là các script hoặc asset. Tệp skill.md chứa metadata mà chúng tôi luôn xử lý. Ví dụ, việc trích xuất văn bản và bảng từ tệp PDF sẽ kích hoạt kỹ năng này. Các hướng dẫn chỉ được tải khi mô hình nhận thấy nó yêu cầu kỹ năng đó. Pattern này đặc biệt quan trọng. Ngoài ra, trong phần script, chúng tôi cũng hỗ trợ mọi người viết các JavaScript tùy chỉnh có thể được hiển thị trong ứng dụng, vì đây là một cách rất dễ dàng để mở rộng cả trong hệ thống iOS và Android.
Quy trình Kích hoạt Kỹ năng
Đi sâu hơn một chút, chúng tôi có lời nhắc hệ thống riêng được tích hợp sẵn với ứng dụng. Sau đó, có một tập hợp các mô tả kỹ năng được thêm vào lời nhắc hệ thống. Khi người dùng yêu cầu điều gì đó, mô hình sẽ quyết định kích hoạt kỹ năng bằng cách đọc metadata của nó. Sau đó, nó gọi ứng dụng tải kỹ năng mà chúng tôi có bên dưới. Phản hồi công cụ từ API call đó chính là nội dung của tệp skill.md. Nội dung này sau đó nằm trong cửa sổ ngữ cảnh. Vì vậy, mô hình bây giờ biết về các chức năng này. Và sau đó nó gọi hàm chạy. À vâng, nó cũng chứa một số JavaScript và sau đó chúng tôi gọi công cụ chạy JavaScript, thực thi JavaScript mà chúng tôi đã lấy từ tệp kỹ năng và sau đó chúng tôi cũng gọi phản hồi trên đó.
Giải mã có ràng buộc và Độ tin cậy
Một điều khác cần đề cập như một phần của quy trình làm việc này là một trong những điều chúng tôi đã làm khi triển khai chức năng Gemma để tăng độ tin cậy, đó là trong thời gian chạy (runtime), chúng tôi áp dụng giải mã có ràng buộc (constraint decoding). Tuy nhiên, nó được tinh chỉnh để chỉ áp dụng cho đầu ra khi chúng tôi tạo ra hoặc gọi một công cụ. Chúng tôi cũng có thể giải mã có ràng buộc để giới hạn nó chỉ cho công cụ cụ thể mà bạn cần gọi. Vì vậy, trong hệ thống này, thay vì chỉ có các ràng buộc JSON chung chung, chúng tôi biết rằng có một tập hợp hữu hạn các công cụ mà mô hình được cho là có thể sử dụng. Do đó, chúng tôi có thể có giải mã có ràng buộc mạnh mẽ hơn. Điều này cũng giúp chúng tôi có một hệ thống đáng tin cậy hơn nói chung bằng cách sử dụng giải mã có ràng buộc mạnh mẽ hơn. Chúng tôi thấy rằng điều này rất hữu ích cho mô hình hai tỷ tham số. Khi các mô hình trở nên có khả năng hơn, chúng tôi nhận thấy lợi thế từ loại giải mã có ràng buộc nghiêm ngặt này ít cần thiết hơn khi bạn chạy một mô hình rất lớn (ví dụ: mô hình 10 tỷ tham số). Tuy nhiên, đối với các mô hình rất nhỏ trên thiết bị, đây là một công cụ rất hữu ích giúp chúng tôi có hàng rào bảo vệ mạnh mẽ hơn cho mô hình, để chúng tôi có thể nâng cao chất lượng và có được sản phẩm hữu ích trong sản xuất.
Bật/Tắt và Kỹ năng Tùy chỉnh
Sau đó, trong ứng dụng, chúng tôi hỗ trợ bạn có thể bật/tắt các kỹ năng mà bạn muốn sử dụng. Ngay cả với các mô tả kỹ năng, bạn cũng có thể quyết định muốn có bao nhiêu mô tả kỹ năng hoạt động tại bất kỳ thời điểm nào. Ví dụ này đang tải một kỹ năng chơi piano ảo, cho phép bạn chạm vào các phím và phát ra âm thanh. Vâng, đây chỉ là những thứ liên quan đến JavaScript. Nhưng sau đó, bạn cũng có thể tải các kỹ năng tùy chỉnh. Bạn có thể tự viết một kỹ năng và tải nó từ một URL, điều này khá thú vị. Nếu bạn muốn thử nghiệm việc tạo mẫu một kỹ năng với Gemma cho một ý tưởng ứng dụng mà bạn có, đây là cách bạn thực hiện. À, các kỹ năng cũng có thể có Khóa API (ví dụ: secret key). Vì vậy, nếu bạn cần sử dụng một dịch vụ web, bạn có thể nhắc người dùng nhập Khóa API. Ví dụ này đang trình bày lại ví dụ về âm nhạc theo tâm trạng. Chúng tôi có một cuộc thảo luận trên GitHub nơi người dùng đang đăng các kỹ năng mà họ đã tự viết. Và các kỹ năng trong cộng đồng mà chúng tôi thích, chúng tôi sau đó có thể đưa lên và coi là các kỹ năng nổi bật trong ứng dụng. Vì vậy, nếu có điều gì đó được phát triển bởi mọi người, chúng tôi có thể có một cách để giới thiệu các kỹ năng cộng đồng hữu ích cho cộng đồng rộng lớn hơn. Đây là kỹ năng của bên thứ ba. Tôi nghĩ điều này sẽ cho chúng ta thấy. Được rồi, đây là việc thêm một kỹ năng giới thiệu động vật. Đây giống như một thứ dành cho trẻ em. Nó có rất nhiều kỹ năng vào ứng dụng. Vâng. Nhưng điểm mấu chốt ở đây là có một rào cản rất thấp để mở rộng mô hình theo cách có liên quan đến người dùng ứng dụng cuối. Vì vậy, điều này rất dễ dàng và chúng ta sẽ đi sâu hơn một chút để xem nó dễ dàng đến mức nào.
Kiến trúc Kỹ năng và Bộ Điều phối
Kiến trúc kỹ năng, khi chúng ta đi sâu hơn một bước, điều này khá phù hợp. Chúng ta có bộ điều phối (orchestrator) riêng. Nó có một registry kỹ năng và chúng ta gọi kỹ năng tải kỹ năng để tải các kỹ năng. Trong các kỹ năng đó, có kỹ năng JavaScript và có ý định gốc (native intents). Cụ thể trong hệ thống Android, chúng ta có thể gọi các ý định hệ thống Android hoặc ý định gốc, và bạn có thể gọi chúng trong kỹ năng của mình. Chẳng hạn như nếu bạn muốn bật và tắt Wi-Fi. Vì vậy, các ý định được hiển thị cho tất cả Android và có sẵn trong JavaScript bạn chắc chắn có thể sử dụng. Sau đó, có skill.md đóng vai trò persona và dữ liệu kịch bản, và sau đó có kỹ năng và tài nguyên cụ thể. Như tôi đã nói trước đây, điều này có thể bao gồm JavaScript chạy hoàn toàn cục bộ, đây là một trải nghiệm ngoại tuyến hoàn chỉnh, hoặc như trong ứng dụng soạn nhạc, chúng tôi thực sự đã gọi một API web và cần một Khóa API mà người dùng đã được nhắc nhập, và điều đó cũng hoạt động trong gallery. À, vậy thì, các công cụ được định nghĩa trước mà chúng tôi có bên dưới để cung cấp một mô hình tinh thần về cách nó hoạt động là chúng tôi có tải kỹ năng giúp chúng tôi tải kỹ năng, chạy JavaScript hoặc chạy ý định. Và chỉ cần bộ điều phối sử dụng ba kỹ năng này là có thể làm cho toàn bộ hệ thống hoạt động.
"Hãy kiểm tra hiệu quả của chúng ta." Đây là từ quản lý sản phẩm
Geminicủa chúng tôi cho thấy: >> "Tốt nhất là đặt nhà hàng. Vui lòng trả lời tôi bằng tiếng Anh."
Phát triển Kỹ năng với Gemini CLI
Kỹ năng này là "xổ số nhà hàng" (restaurant roulette). Vâng, chúng tôi thực sự có khoảng 80 kỹ năng như vậy bởi vì việc phát triển kỹ năng rất dễ dàng bằng cách sử dụng anti-gravity hoặc Gemini CLI. Chúng tôi có rất nhiều lựa chọn để thể hiện và mọi người rất vui khi phát triển chúng. Ở đây, chúng ta có thể xem cấu trúc của "xổ số nhà hàng". Vâng, đây là phần bên dưới. Nó yêu cầu secret là true. Được rồi. Chúng tôi muốn lấy một Khóa API và nó tìm kiếm 10 nhà hàng. Sau đó, nó trả về địa điểm và ẩm thực.
Và đây là tệp index.js, nơi chúng ta có thể có một web view đơn giản, sau đó chúng ta đã render để có được vòng quay thực tế. Bạn rõ ràng có thể tự mã hóa tất cả những điều này, và có mã nguồn đầy đủ ở đây cho các ví dụ Claude Code mà chúng tôi chưa từng xuất bản, nhưng nó hoạt động rất tốt trong Claude Code. Chúng tôi có cả mã nguồn cho ví dụ và skill spec để bắt đầu. Và có đầy đủ hướng dẫn trên GitHub nếu bạn muốn thử viết kỹ năng của riêng mình. Nhưng đây là mô hình mà chúng tôi thực sự sử dụng nhiều nhất: sử dụng các kỹ năng để viết kỹ năng. Tức là, sử dụng một cái gì đó như Gemini CLI hoặc Claude Code hoặc anti-gravity. Đây là mô hình yêu thích của chúng tôi, nơi chúng tôi chỉ cần nói: "Này, tôi muốn viết một kỹ năng cho AI edge gallery." Ví dụ này hoạt động trong Gemini CLI, nơi chúng tôi chỉ cần nói: "Này, đây là tài liệu, đây là một số ví dụ về các kỹ năng mà bạn có thể đọc." Sau đó, đây là kỹ năng tôi muốn xây dựng, đó là offline archiver.
À vâng, ý tưởng là khi bạn chụp ảnh quanh London chẳng hạn, nó sẽ có thể cung cấp cho bạn thông tin như: "Có bức tượng Churchill tuyệt vời đó tôi đã đi qua." Nó có thể tìm kiếm một chút về Churchill cho bạn và sau đó trên chuyến bay trở về, bạn có thể quay lại kỹ năng này và nó sẽ có một loạt thông tin về những thứ bạn đã thấy mà bạn có thể đọc trên chuyến bay về nhà. Tôi nghĩ đó là nguồn cảm hứng cho kỹ năng này. Vâng, nó tìm nạp nội dung Wikipedia và sau đó lưu trữ cục bộ và sau đó có một index.
Ngoài ra, với CLI, chúng tôi cũng có thể yêu cầu, bởi vì chúng tôi có một kỹ năng ADB trong Gemini CLI, bạn cũng có thể yêu cầu nó tự kiểm tra kỹ năng bằng cách nói: "Này, bạn có quyền truy cập vào một điện thoại được kết nối qua ADB." Và sau đó Gemini CLI sử dụng kỹ năng ADB Android của nó để kiểm tra xem ứng dụng thực sự hoạt động và kỹ năng đang làm những gì nó nói trong ứng dụng, và chúng ta chỉ cần yêu cầu nó lặp lại. Và nó sẽ tự thực hiện một số xác thực cơ bản và trả về. Vâng. Vì vậy, tôi nghĩ đây sẽ là, nếu điều này phát, đây sẽ là một ví dụ về việc làm điều đó.
Đây là chúng tôi đang sử dụng Gemini CLI để làm điều đó. Và điều này hoạt động rất mạnh mẽ. Tôi nghĩ trong số khoảng 80 kỹ năng mà đội ngũ đã làm nội bộ, có lẽ hơn một nửa là các kỹ năng được mã hóa "kiểu ý tưởng" (vibe coded skills) ít nhất là ban đầu, điều này thực sự giảm bớt rào cản cho mọi người để mở rộng một Mô hình Ngôn ngữ Lớn (LLM) để làm những điều mới theo cách hữu ích cho đối tượng của họ.
Kích thước Mô hình và Dự án Mã nguồn mở
"Tất cả các ví dụ ở đây đang chạy trên
mô hìnhnhỏ nhất trongứng dụnghay trênthiết bị?" Tất cả các ví dụ ở đây mặc định. Đó là một câu hỏi hay. Vậy câu hỏi cho bản ghi âm là: tất cả các ví dụ có đang chạy trênmô hìnhnhỏ nhất không? Trong trường hợp này, các ví dụ đang chạy trênmô hình 4B. Đúng vậy.Mô hình 2B, cáckỹ năngcũng sẽ hoạt động vớimô hình 2Bvà bạn có thể thử điều đó. Nhưng, vâng, hiệu suất của bạn có thể khác nhau, ví dụ như cáckỹ năngđơn giản hơn, ítkỹ nănghơn, v.v. Nhưng tất cả các ví dụ bạn đã thấy đang chạy trênmô hình 4B. "ThửChrome CVP." "À, thử làm một phiên bảnkỹ năngtrongChrome." "Vâng. Tức là, sử dụngChrome CVPvớikỹ năngđể thực sự sử dụng mộtmô hình cục bộđể hoạt động trong trình duyệt của bạn." "Chúng tôi chưa làm điều đó. Không." "Vâng. Đó là một điều thú vị để thử."
À vâng. Và đây là lời giới thiệu nhanh về liên kết này. Một vài điều về gallery mà tôi cũng nên đề cập: gallery là một dự án mã nguồn mở và dự án mã nguồn mở này được xây dựng dựa trên công cụ lite hoặc TLM mà bạn đã thấy trước đó trong phần giới thiệu. Vì vậy, ứng dụng này, ngoài việc là một thứ thú vị để sử dụng, bạn có thể tạo mẫu ý tưởng ứng dụng hoặc xem: "Wow, điều này có thể thực hiện được trong mô hình trên điện thoại không? Hoặc nó sẽ nhanh đến mức nào nếu tôi chạy nó trên điện thoại? Hoặc loại kỹ năng này thực sự có khả năng thực hiện không?" Ngoài việc có thể tạo mẫu mô hình, bạn cũng có quyền truy cập đầy đủ vào mã nguồn ở đây. Và mô hình cũng cho phép, hoặc xin lỗi, và nó cũng được xây dựng dựa trên cùng một cơ sở hạ tầng như mã nguồn mở lite T và cơ sở hạ tầng tăng tốc lite TLM bên dưới. Vì vậy, nếu bạn thấy điều gì đó bạn thích trong gallery, bạn biết rằng, vâng, bạn cũng có thể triển khai mô hình gemma theo một cách khác.
API Nguồn Mở và Kỹ Năng Cộng Đồng
Nhưng nếu bạn muốn có trải nghiệm hoặc tốc độ tương tự, bạn có thể sử dụng các API nguồn mở cơ bản và tải một mô hình từ trang Hugging Face của chúng tôi (mà chúng ta sẽ xem xét kỹ hơn một chút) và chạy trực tiếp mô hình đó. Là một phần trong đó, chúng tôi cũng có một bộ thảo luận trên gallery, nơi hiển thị một số kỹ năng cộng đồng đã được tải lên, từ các thứ như giải trí cho mèo đến blackjack. Nếu bạn phát triển một kỹ năng, hãy đăng nó tại đây để những người khác trong cộng đồng dễ dàng tìm thấy hơn. Sau đó, những kỹ năng nào có vẻ hấp dẫn hoặc hữu ích cho nhiều người, chúng tôi có thể thêm vào danh sách kỹ năng ưu tiên của bên thứ ba trong ứng dụng, giúp mọi người dễ dàng khám phá hơn. Chúng tôi đã thấy một lượng tương tác đáng kể đối với phần này vào cuối tuần qua, mặc dù nó chỉ mới ra mắt từ thứ Năm tuần trước.
Chuyển Hướng sang Mô Hình Nhỏ (Tiny Models) cho Ứng Dụng
Mọi thứ chúng ta đã thấy với các kỹ năng thực sự áp dụng cho mô hình 2B và 4B, chủ yếu trên điện thoại di động sẽ được sử dụng cho các ứng dụng như system genis, nơi chúng sẽ thực sự được đưa vào sản xuất. Chắc chắn, đối với IoT hoặc máy tính để bàn, hoặc các ứng dụng biên (edge applications), bạn có thể tự tải mô hình đó và chạy các trường hợp sử dụng kỹ năng này trong sản xuất trên các nền tảng Qualcomm IoT mà chúng ta đã thấy trước đó, chẳng hạn. Nhưng để triển khai các mô hình trong ứng dụng hiện nay và đưa chúng vào các ứng dụng sản xuất, chúng tôi thấy ngày càng nhiều người đang sử dụng các mô hình nhỏ hơn để làm điều đó. Chúng tôi gọi đây là mô hình siêu nhỏ (tiny models), tức là các mô hình có ít hơn 1 tỷ tham số theo quan điểm của chúng tôi. Đây là những thứ mà chúng tôi hợp tác với các nhóm để triển khai Mô hình Ngôn ngữ Lớn (LLMs) trong ứng dụng của họ. Đây là những loại hình mà chúng tôi đang thấy. Vì vậy, tôi muốn xem xét nhanh quy trình làm việc đó trông như thế nào.
Lighter TLM: Động Cơ Cho Mô Hình Nhỏ
Lighter TLM là động cơ cung cấp năng lượng cho gallery và bản thân nó là một dự án nguồn mở có các C++ APIs và Java APIs. Các Swift APIs sẽ sớm ra mắt. Nó cũng có một Python API kể từ tuần trước, khá phù hợp cho các nhà phát triển IoT thích làm việc với Python. Nó nhận một tệp LLM và có các thành phần cần thiết để chạy hoàn chỉnh một auto-regressive loop và hiển thị nó thông qua các API dễ sử dụng. Vâng, đó là các C++ APIs đa nền tảng, và khi thích hợp, cùng một API có thể được sử dụng với hardware acceleration (tăng tốc phần cứng) như ví dụ về Qualcomm. Chúng tôi cũng đã xuất bản các mô hình nhỏ hơn khác trong quá khứ. Chúng tôi chưa xuất bản phiên bản này cho Gemma 4, nhưng trong quá khứ, chúng tôi cũng đã xuất bản các mô hình hoạt động trên MediaTek silicon cũng như Intel silicon. Vâng, trong suốt năm nay, và khi ngày càng có nhiều mô hình nhỏ hơn có sẵn, chúng ta sẽ thấy sự hỗ trợ NPU rộng rãi hơn.
Quy Trình Làm Việc Triển Khai Mô Hình Nhỏ
Vậy quy trình làm việc là bạn bắt đầu từ transformers. Chúng tôi sử dụng một gói có tên là lighter t torch có thể thực hiện một số PyTorch native optimizations (tối ưu hóa PyTorch gốc) để tối ưu hóa cho lighter t và cũng có tích hợp quantization (lượng tử hóa) vào quy trình làm việc. Sau đó, điều này sẽ tạo ra một tệp lighter TLM. Bạn có thể triển khai nó, hoặc thử nghiệm với ứng dụng gallery hoặc triển khai trực tiếp vào trường hợp sử dụng ứng dụng sản xuất của bạn bằng lighter TLM trên bất kỳ nền tảng nào bạn muốn làm việc. Vâng, đây là một cái nhìn khác về quy trình làm việc đó.
API Lighter T Torch Generative cho Các Trường Hợp Nâng Cao
Đối với các trường hợp sử dụng thực sự nâng cao, chúng tôi có lighter t torch generative API. Vì vậy, nếu bạn thực sự muốn tự viết mô hình siêu nhỏ của riêng mình từ đầu và đào tạo nó từ đầu, chúng tôi cũng hỗ trợ quy trình làm việc đó, cũng như quy trình làm việc tinh chỉnh tiêu chuẩn. Và có một API được gọi là torch generative API cho phép bạn, về cơ bản, nó có các khối xây dựng (building blocks) cho Mô hình Ngôn ngữ Lớn (LLMs) hỗ trợ nhiều LLMs là PyTorch gốc theo cách mang lại hiệu suất thực sự tốt khi bạn chạy chúng trên thiết bị. Vâng, đó là quy trình làm việc.
Kiến Trúc Triển Khai NPU và Thư Viện Tối Ưu Hóa
Đây là kiến trúc của chúng tôi để triển khai trên các NPU. Hai điểm chính từ slide này có lẽ là: Thứ nhất, bên dưới, chúng tôi thực sự đầu tư rất nhiều công sức vào các thư viện tối ưu hóa. Chúng tôi có XNN, một thư viện tối ưu hóa CPU, và ML drift, các thư viện tối ưu hóa cho GPUs. Chúng tôi có các nhóm làm việc để đảm bảo cả hai đều có hiệu suất xuất sắc. Rất nhiều ứng dụng one-off của Google dựa vào cả hai thư viện này. Vì vậy, chúng tôi rất muốn đảm bảo chúng có hiệu suất thực sự tốt và hoạt động trên phạm vi thiết bị rộng nhất có thể. Và chúng sử dụng cái mà chúng tôi gọi là quy trình làm việc JIT (Just-In-Time), nơi chúng tôi tạo ra một sản phẩm duy nhất được gọi là tệp lighter TLM hoặc tệp lighter T có thể hoạt động trên CPU và GPU và được triển khai cho nhiều loại thiết bị. Đối với NPU, chúng tôi cần một cái gì đó chuyên biệt hơn một chút. Đối với NPU, chúng tôi cần gọi một vendor compiler plug-in (trình cắm bộ biên dịch của nhà cung cấp) trước, và điều đó sử dụng quy trình làm việc biên dịch trước (ahead of time compile workflow). Vì vậy, bạn cần tạo ra một sản phẩm cụ thể cho một NPU cụ thể. Và sau đó, trong thời gian chạy của chúng tôi, chúng tôi gọi một bộ điều phối (dispatch) đến một API cụ thể được phép điều phối công việc đến trình điều khiển thiết bị của NPU. Nhưng cả hai đều có sẵn thông qua một API nhất quán. Vì vậy, mặc dù đường dẫn JIT so với AOT ảnh hưởng đến quy trình làm việc xây dựng, quy trình làm việc phát triển ứng dụng thực tế rất giống nhau trên NPU, CPU hoặc GPU.
Xuất và Suy Luận Mô Hình, Hỗ Trợ Mô Hình Bên Thứ Ba
Việc xuất và suy luận (inference) thực sự đơn giản. Chúng tôi có lighter TT torch để chỉ xuất. Tôi biết tôi đã nói rất nhiều về các mô hình Gemma vì đây là "tuần lễ Gemma" đối với chúng tôi, vì vậy chúng tôi rất hào hứng với Gemma hiện tại. Điều đáng nói là chúng tôi cũng hỗ trợ các mô hình của bên thứ ba. Có một mô hình tham số Queen 6B mà bạn thấy ở đó, và những mô hình Queen đó cũng hoạt động trong ứng dụng, đó là những gì bạn sẽ thấy ở phía bên phải. Và ứng dụng cũng hỗ trợ việc tải bất kỳ tệp lighter TLM nào và chạy nó để nhận các số liệu điểm chuẩn, điều mà chúng tôi hy vọng sẽ thấy trong video trong giây lát.
Vì vậy, bạn có thể chạy nó, ví dụ, trên GPU và sau đó trên Pixel mới nhất mà bạn đang mô phỏng ở đây. Thật ra, đó là một câu hỏi hay. Thành thật mà nói, tôi không biết điều này. Chúng tôi thực hiện rất nhiều thử nghiệm trên Pixel và rất nhiều thử nghiệm trên S25 nữa. Vì vậy, tôi cho rằng đó là một trong hai thiết bị đó, nhưng tôi không biết chắc chắn. Và thực ra, chúng tôi đã không hiển thị nó ở đó vì gần đây, trong bản phát hành cuối cùng, chúng tôi đã thêm một biểu tượng tùy chọn bên dưới mỗi cuộc trò chuyện, và nếu bạn nhấp vào đó, nó sẽ hiển thị các số liệu giải mã được điền sẵn của mô hình. Vì vậy, nếu bạn muốn, bạn có thể tìm bất kỳ mô hình nào chúng tôi có trên Hugging Face và tải nó vào ứng dụng, sau đó chạy để xem các số liệu điểm chuẩn cho mô hình này trên một điện thoại cụ thể nếu bạn muốn. Vâng, bạn có thể, và cũng trong giao diện dòng lệnh (CLI), nếu bạn đang chạy trên máy tính để bàn, bạn cũng có thể chỉ cần sử dụng lighter TLM run nếu bạn muốn thực hiện một số thử nghiệm trên máy tính để bàn để hiểu cách các mô hình hoạt động trên máy tính để bàn.
Ví Dụ: Mô Hình VLM Nhỏ gọn (Fast VLM của Apple)
Đây là một ví dụ khác về mô hình của bên thứ ba, đây là Fast VLM, một mô hình của Apple. Nó thực sự là một mô hình VLM rất tốt chỉ với 500 triệu tham số. Và nó đang chạy với hardware acceleration trên Qualcomm, đó là lý do tại sao nó chạy rất nhanh. Và cái này đang chạy, vâng, cái này đang chạy trên một chiếc S25 tôi nghĩ, bởi vì đó là Qualcomm silicon, và chúng tôi chỉ đơn giản là để nó chạy trong một vòng lặp, nói rằng "mô tả cảnh, mô tả cảnh" với đầu vào video, và nó chạy, vâng, nó chạy rất rất nhanh.
Vì vậy, đây là một ví dụ điển hình về những gì có thể thực hiện được với một mô hình có thể triển khai trên thiết bị. Trong trường hợp này, chúng tôi chưa thực hiện lượng tử hóa 4-bit, nhưng tôi giả sử nếu chúng tôi đủ động lực, chúng tôi đã có thể làm điều đó và sau đó chúng tôi sẽ có một thứ chỉ yêu cầu thêm khoảng 250 hoặc 260 megabyte trong ứng dụng của bạn để mang lại trải nghiệm loại này. Vì vậy, vâng, chúng chắc chắn khả thi. Và đây là khi tôi nói về các mô hình như thế này, đây là một ví dụ về một mô hình 500 triệu tham số có mục đích chung. Nó đã được đào tạo trên một tập hợp khá hẹp các thứ, đó là mô tả cảnh hoặc chỉ hình ảnh thành mô tả. Vì vậy, đó là một trường hợp sử dụng khá hẹp nhưng vẫn có mục đích chung. Vì vậy, đây là một ví dụ điển hình về các mô hình siêu nhỏ lớn hơn, những mô hình nhỏ hơn mà chúng tôi có như GMA 3270M, ví dụ, những mô hình đó thường yêu cầu tinh chỉnh để thực hiện một tác vụ cụ thể. Nhưng, vâng, đây là một ví dụ điển hình, đây là lý do tại sao tôi đưa nó vào, nó là một ví dụ điển hình về một mô hình siêu nhỏ có mục đích chung rất hữu ích. Cũng đáng lưu ý rằng, tôi không nghĩ mình đã đưa vào bài nói chuyện các ví dụ khác về các mô hình siêu nhỏ có mục đích chung bao gồm rất nhiều mô hình phiên âm rất nhỏ, hoặc một số mô hình dịch thuật theo cặp hẹp hiện có, nhiều trong số đó chúng tôi hỗ trợ, nhiều trong số đó cũng có trên trang Hugging Face của chúng tôi nếu bạn muốn kiểm tra chúng.
Các Mô Hình Cụ Thể: Function Gemma, Mobile Actions, Tiny Gardens
Vâng, có rất nhiều thứ có sẵn trên Hugging Face. Vâng, slide tiếp theo chỉ hiển thị một vài mô hình mà tôi muốn nói đến. Function Gemma là một mô hình mà chúng tôi đã xuất bản hợp tác với GDM vào năm ngoái. Function Gemma là một mô hình có mục đích chung mà bạn có thể tinh chỉnh thêm cho function calling (gọi hàm), và có các sổ tay Colab ngoài kia nếu bạn muốn tìm hiểu về cách định dạng tập dữ liệu và cách tinh chỉnh Function Gemma cho function calling. Hai mô hình tiếp theo phía trên là Mobile Actions và Tiny Gardens. Mobile Actions là ví dụ mà tôi đã đề cập trước đó, có 10 hành động di động khác nhau mà chúng tôi đã tự tinh chỉnh, nơi chúng tôi đạt được tôi nghĩ là khoảng 86 hoặc 70% độ tin cậy. Tiny Garden là một ví dụ khác, đây là một trò chơi mà chúng tôi đã xây dựng trong ứng dụng gallery mà bạn cũng có thể chơi. Nó chỉ là một ví dụ khác về mô hình voice to function calling đã được tinh chỉnh mà bạn có thể sử dụng.
Fine-tuning Hướng Dẫn và Hậu Tố Mô Hình
Vâng, nó được tinh chỉnh theo hướng dẫn (instruction fine-tuned). Vì vậy, trong các mô hình, khi GDM xuất bản các mô hình, đôi khi chúng có hậu tố PT và đôi khi có hậu tố IT. PT là khi chúng tôi xuất bản một mô hình ngay sau quá trình pre-training (tiền đào tạo) trước khi fine-tuning (tinh chỉnh). Điều này hữu ích cho những người dùng chuyên gia vì bạn có thể tự thực hiện tất cả quá trình instruction fine-tuning của riêng mình. Bạn có thể kiểm soát hoàn toàn tính cách của mô hình và bạn không cố gắng bỏ đi một số tinh chỉnh mà chúng tôi đã thực hiện trong trường hợp này. Cách chúng tôi dạy mô hình cách thực hiện function calling thực sự là thông qua chính quá trình instruction fine-tuning. Vì vậy, khi chúng tôi xuất bản một mô hình để tinh chỉnh thêm cho function calling, nó đã có tính cách function calling, và đó thực sự là điều chúng tôi muốn xuất bản. Trong trường hợp này, mô hình này dành cho tinh chỉnh thêm nhưng nó là một mô hình IT.
Các Mô Hình Ngôn Ngữ Lớn Gemma và Ứng Dụng Nâng Cao
Thông thường, đối với các mô hình lớn hơn, như dòng Gemma 3, chúng tôi có cả checkpoint IT (instruction-tuned) và PT (pre-trained). Việc lựa chọn checkpoint nào phụ thuộc vào việc bạn có lượng dữ liệu lớn và muốn tự mình thực hiện fine-tuning toàn bộ hay không. Có một cuộc thảo luận riêng về các use cases AI có chủ quyền mà một số người từ DeepMind sẽ trình bày vào cuối tuần này. Tôi hình dung rằng các trường hợp đó sẽ bắt đầu với checkpoint đã được pre-train của chúng tôi, sau đó thêm một kho dữ liệu khổng lồ gồm dữ liệu có chủ quyền hoặc dữ liệu doanh nghiệp, và bạn có thể fine-tune hoàn toàn một mô hình 27 tỷ tham số để thực hiện công việc cụ thể.
Một ví dụ khác là embedding Gemma. Về mặt kỹ thuật, nó không phải là một Mô hình Ngôn ngữ Lớn (LLM), nhưng embedding Gemma là một mô hình text embedding mà chúng tôi đã phát hành cùng với nhóm Gemma vào tháng 9 năm ngoái. Mô hình này thực hiện text embedding cho các use cases kiểu RAG. Đây là một mô hình embedding rất mạnh mẽ chỉ với 300 triệu tham số. Đó là một ví dụ khác về một loại mô hình tiện ích cao, mặc dù không phải là một LLM về mặt kỹ thuật (ngay cả khi bên trong nó là một transformer), nhưng nó là một ví dụ về một mô hình nhỏ rất hữu ích cho các use cases on-device.
Chúng tôi đã đề cập đến việc AOT compilation (Ahead-of-Time compilation) là workflow của chúng tôi để tăng tốc phần cứng on-device, tốt nhất để phân phối các mô hình nhỏ đến nhiều nền tảng. Light TLM được xây dựng trên LightORT và hỗ trợ tất cả các loại mô hình này. Bạn cũng có thể tìm thấy các mô hình non-LLM trên Hugging Face. Điều này khá liên quan vì khi bạn xây dựng một ứng dụng phức tạp hơn, bạn thường cần một số thứ xung quanh LLM, chẳng hạn như mô hình voice activity detection hoặc denoising model. Rất nhiều mô hình này cũng có sẵn chỉ bằng cách sử dụng runtime LightORT. Light TLM là runtime có toàn bộ auto-regressive loop. Nó được xây dựng trên LightORT và có một bộ các mô hình LLM có sẵn để sử dụng với Light TLM. Tuy nhiên, cũng có rất nhiều mô hình hỗ trợ non-auto-regressive có sẵn để sử dụng với Light API rất phù hợp để triển khai một ứng dụng hoàn chỉnh.
Đối với người dùng cao cấp, bạn có thể tùy chỉnh hoàn toàn các mô hình. Nếu bạn muốn viết phiên bản llama, moonshine, fi hoặc quen của riêng mình, bạn có thể sử dụng codebase directory.
Ứng dụng Thực tế với Mô hình Nhỏ: AI Edge Eloquent
Chúng tôi có thể làm rất nhiều điều với các mô hình rất nhỏ. Các mô hình thuộc lớp 500M có sẵn cho một số tính năng tiêu chuẩn của các LLM nhỏ hơn. Chúng tôi đã đạt được nhiều thành công trong việc fine-tuning chúng cho các ứng dụng. Ví dụ tiếp theo tôi sẽ trình bày là một ứng dụng mà chúng tôi đã xây dựng bằng cách sử dụng các LLM nhỏ. Đây là một ứng dụng hiện chỉ có trên iOS có tên là AI Edge Eloquent.
AI Edge Eloquent là một loại mô hình transcription, nhưng thay vì chỉ đơn thuần chuyển đổi giọng nói thành văn bản, nó có một bước polish tự động riêng biệt để loại bỏ tất cả các từ xen, từ đệm ("ừm", "à"). Ví dụ, khi bạn nghe bản transcription của bài thuyết trình này, bạn sẽ thấy rất nhiều từ đệm. Eloquent được xây dựng cho loại user story transcription này, nơi nó thực hiện dictation nhưng sau đó có một bước polish tự động để loại bỏ tất cả các từ xen và từ đệm. Vì vậy, nếu bạn muốn đọc chính tả một tin nhắn để sử dụng sau này, nó có thể làm sạch các thành ngữ giao tiếp.
Một tính năng khác là danh sách biasing. Ví dụ, nếu chúng ta đang nói về LLM và bạn nói "Bạn đã huấn luyện một Laura cho cái này chưa?", bất kỳ dịch vụ transcription tiêu chuẩn nào cũng sẽ dịch "Laura" thành tên "Lau" hoặc "A". Trong khi đó, bạn có thể cung cấp cho nó một danh sách các từ khóa hoặc thuật ngữ kỹ thuật, và sau đó mô hình sẽ "bias" theo những từ đó vì đó là cách con người thực sự viết.
Các tính năng chính ở đây là:
a) Nó chạy hoàn toàn offline.
b) Nó có từ điển biasing riêng (nếu bạn muốn gọi nó như vậy).
c) Nó làm sạch văn bản, như bạn thấy ở giữa có bước polished.
Nhìn chung, điều này mang lại một trải nghiệm offline khá gọn gàng, không tốn chi phí, vì có một số dịch vụ trả phí cung cấp tính năng này. Nhưng ứng dụng này có thể cung cấp cho bạn văn bản đã được làm sạch thực sự rõ ràng.
[Người hỏi]: Liệu bước cuối cùng đó có được thực hiện bằng cách thay đổi các mã thông báo đặc biệt trong mô hình hay được thực hiện bằng cách phủ lên một bản đồ nào đó?
[Người trình bày]: Đó là bước cuối cùng, đúng vậy. Tôi sẽ trả lời câu hỏi của bạn trong hai slide nữa, nhưng đây là một câu hỏi hay. Câu hỏi cho bản ghi là liệu việc làm sạch có được thực hiện bên trong mô hình chính hay bên ngoài, và cách áp dụng biasing. Chúng ta sẽ trả lời điều đó trong hai slide nữa.
Kiến trúc Xử lý Văn bản và Cá nhân hóa
Đúng vậy, đây là phần personalization. Bạn có thể thêm các thứ như "Laura" là ví dụ chúng tôi luôn sử dụng vì nó khá gần gũi với chúng tôi. Nó cho phép bạn, nếu muốn kết nối với tài khoản Google của mình, nhập dữ liệu từ Gmail hoặc thứ gì đó và tìm các từ bất thường, sau đó thêm chúng vào danh sách biasing hoặc bạn có thể tự thêm chúng vào. Những thứ mà mọi người thường đưa vào đây là tên riêng, bởi vì các mô hình thường mắc lỗi với những tên không phổ biến, cũng như các thuật ngữ kỹ thuật. Ví dụ như Gianning và Surreal là hai người trong nhóm đã phát triển ứng dụng này. Vì vậy, không có gì ngạc nhiên khi đây là ví dụ chúng tôi có.
Đây là nơi chúng tôi gọi là text polishing engine (công cụ làm sạch văn bản). Chúng tôi có hai bước ở đây. Điều quan trọng cần lưu ý là cả hai bước này: đầu tiên, tôi sẽ mô tả, sau đó tôi sẽ nói về các mô hình.
Đầu vào micro đi vào một speech recognition engine (công cụ nhận dạng giọng nói) để cho ra bản transcription chưa được lọc. Sau đó, ở nửa dưới, chúng ta có personalization flow (luồng cá nhân hóa) nơi bạn nhận được một tập hợp các từ không phổ biến hoặc độc đáo, sau đó đi vào các thuật ngữ liên quan. Cả hai đều đi vào một text polishing engine, đây là một mini LLM chuyên dụng chỉ dành cho việc làm sạch văn bản.
Chúng ta có thể đã xây dựng một LLM duy nhất để làm tất cả điều này, nhưng thực tế của phát triển mobile đôi khi là với các mô hình nhỏ cũng có câu chuyện về tính mô-đun. Vì vậy, cùng một engine transcription trong ứng dụng của bạn, bạn có thể có một use case khác cho nó và bạn có thể không muốn trả chi phí trọng số (weights) của chúng bằng cách sử dụng chúng ở nhiều nơi. Đây là một pattern chúng tôi thấy đang nổi lên khi chúng tôi xây dựng nhiều ứng dụng thuộc loại này: playbook về tính mô-đun. Vì vậy, về lý thuyết, hai mô hình đó có thể được kết hợp lại. Trong thực tế, việc có các mô hình riêng biệt là một lựa chọn thực dụng hơn.
[Người hỏi]: Điều này cũng có chiều sâu hơn.
[Người trình bày]: Đúng vậy. Và bạn cũng có thể kiểm tra những gì đang xảy ra ở giữa, dễ gỡ lỗi hơn. Chúng tôi cũng thấy điều tương tự một chút với voice-to-function calling, nhưng đó là một câu chuyện khác cho một ngày khác.
Phát triển Mô hình Dẫn xuất từ Gemma
Một điều khác cần chỉ ra là ASR engine (công cụ nhận dạng giọng nói tự động) và text generation có logo Gemma ở góc. Đây không phải là các mô hình Gemma được phát hành chính thức, nhưng chúng tôi đã thực hiện cùng một workflow mà chúng tôi đang khuyên những người khác làm. Chúng tôi đã lấy các mô hình Gemma, mô hình Gemma nhỏ hơn (đây sẽ là một derivative từ dòng Gemma 3270M), và về cơ bản đã fine-tune mô hình đó để có một transcription engine và sau đó là một text polishing engine. Chúng tôi đã fine-tune chúng.
Workflow đó thường trông như thế nào, để bạn hiểu rõ hơn, là chúng tôi sẽ sử dụng một workflow trong đó một Mô hình Ngôn ngữ Lớn (LLM) mạnh hơn nhiều trên đám mây để tạo ra rất nhiều dữ liệu tổng hợp (synthetic data) tương ứng với loại nội dung chúng tôi muốn. Sau đó, khi bạn có vài triệu hoặc hàng chục triệu (dữ liệu tổng hợp) tùy thuộc vào mức độ tham vọng của bạn, bạn đưa nó vào một workflow fine-tuning và fine-tune mô hình nhỏ cơ sở mà bạn đang làm việc để có được một mô hình dẫn xuất. Workflow tương tự mà chúng tôi đang trình bày ở đây, chúng tôi đã sử dụng nội bộ để phát hành một ứng dụng ghi chú mạnh mẽ hơn. Nhưng workflow tương tự này là lý do tôi trình bày nó ở đây như một ví dụ thực tế về cách chúng tôi đang sử dụng các mô hình nhỏ dẫn xuất từ Gemma để xây dựng các ứng dụng sản xuất mới. Chúng tôi cũng đang sử dụng flow này cho nhiều use cases khác nội bộ, hỗ trợ các sản phẩm Google 1p và nhiều cách khác mà những sản phẩm đó có thể sẽ tự nói về mình theo thời gian. Nhưng các mô hình Gemma nhỏ hơn thực sự rất mạnh mẽ cho loại use case này, và chúng tôi đang thấy hiệu quả tốt từ nó.
[Người hỏi]: Tôi sẽ kết hợp nó với bàn phím vì điều này rất hữu ích.
[Người trình bày]: Đúng vậy, đó là những gì text polishing engine thực hiện. Là một phần của đó, chúng tôi... texting engine đã được huấn luyện, tôi đoán là được instruction fine-tuned, để có một lời nhắc hệ thống kiểu như: "Này, đây là những từ đặc biệt của bạn. Vui lòng sửa bất cứ điều gì nghe giống những từ này thành những từ này." Và sau đó cũng loại bỏ các từ xen hoặc sự thiếu rõ ràng hoặc thậm chí những thứ như "Tôi quên nói điều này" hoặc "bỏ qua điều đó."
[Người hỏi]: Có lẽ là một kỹ năng.
[Người trình bày]: Đúng vậy. Không, trong trường hợp này, nó không phải là một skill vì đây là một mô hình nhỏ. Chúng tôi thực sự chỉ huấn luyện hành vi đó vào mô hình. Đúng là với mô hình 4 tỷ tham số có thể có một phiên bản của điều này bạn có thể làm như một skill, đó thực sự sẽ là một dự án phụ thú vị. Nhưng đối với các mô hình nhỏ, playbook chúng tôi thường thấy thực sự hữu ích là tạo dữ liệu tổng hợp với một mô hình lớn hơn, sau đó chọn một mô hình có sẵn như Gemma 327M hoặc tương tự và chạy với fine-tuning. Sau đó, kết hợp với quantization, bạn có thể phát hành một tính năng hẹp khá hấp dẫn cho một tập hợp người dùng rất rộng, được hỗ trợ bởi một LLM hoạt động trên nhiều thiết bị.
[Người hỏi]: Bạn có GitHub repo nào đó, một workflow về cách fine-tune nó không? Bởi vì không chỉ là fine-tuning, mà còn là warm-up quá trình huấn luyện và sau đó bắt đầu...
[Người trình bày]: Đúng vậy, chúng tôi có. Với ấn phẩm Gemma 3270M, chúng tôi có một Colab notebook. Với Gemma 327M và Function Gemma, cả hai khi chúng tôi phát hành các mô hình đó đều có Colab notebooks hướng dẫn cách thực hiện fine-tuning hoàn chỉnh.
Kinh nghiệm Fine-tuning và Hiệu suất
[Người trình bày]: Đúng vậy.
[Người hỏi]: Về fine-tuning, kinh nghiệm của bạn là gì? Lấy ví dụ về function calling.
[Người trình bày]: Đúng vậy.
[Người hỏi]: Và bạn nói rằng bạn có 80% cơ hội khớp với 10 chức năng.
[Người trình bày]: Chúng tôi đã hoàn thành điều đó.
[Người hỏi]: Đó có lẽ là sau fine-tuning?
[Người trình bày]: Đúng vậy.
[Người hỏi]: Và bạn có thể cho biết một số con số trước đó là bao nhiêu không?
[Người trình bày]: Ồ, wow. Chúng ta đang nói về...? Ồ, wow.
Hiệu suất Mô hình và Fine-tuning
Chúng tôi thấy sự cải thiện từ khoảng 40% lên 86% trong các tác vụ. Trong giới hạn 86% đó, chúng tôi không muốn... Ồ, chúng tôi có 10 hàm và có thể hai trong số đó đã kéo mức trung bình của chúng tôi xuống rất nhiều. Có khoảng tám hàm đơn giản có độ tin cậy trên 90%, chẳng hạn 93%. Vì vậy, với các hàm rất đơn giản, chúng tôi có độ tin cậy thực sự rất cao. Tôi quên mất các chi tiết cụ thể, nhưng có hai hàm đã kéo mức trung bình xuống khoảng 86%, đó là kết quả cuối cùng của chúng tôi. Cũng có một bài đăng trên blog mà bạn có thể đọc để biết thêm chi tiết.
Chúng tôi thường xuyên thấy điều này với các mô hình nhỏ hơn. Kinh nghiệm của chúng tôi là trên một eVals nhất định, việc fine-tuning mang lại từ 20 đến 40 điểm. Vì vậy, đó là một chiến thắng thực sự đáng kể cho các mô hình nhỏ, đặc biệt là khi chúng ta nói về mô hình 200 triệu tham số hoặc 270 triệu tham số mà chúng tôi đã công bố. Fine-tuning là điều cần thiết cho hầu hết các tác vụ, trừ khi bạn có một mô hình đã được công bố để thực hiện một tác vụ cụ thể, như các mô hình chuyển đổi giọng nói thành văn bản hoạt động rất tốt ở một tác vụ và không yêu cầu fine-tuning thêm, bởi vì chúng đã được định hướng để làm việc đó ngay từ đầu. Nhưng nếu bạn muốn thực hiện một tác vụ cụ thể của riêng mình và triển khai nó trên nhiều thiết bị, thì fine-tuning, ít nhất là hiện tại, là quy trình làm việc được lựa chọn. Điều này có thể thay đổi trong tương lai.
Hỗ trợ Colab và Fine-tuning cho Gemma
Người hỏi: Chúng tôi có một colab có thể sử dụng web không?
Người trả lời: Đó là một câu hỏi hay. Chúng tôi có một colab để có được tệp LIDAR hoặc TLM. Hỗ trợ của chúng tôi cho LIDAR hoặc TLM trên web đang trong quá trình phát triển. Vâng, tôi chỉ có thể nói rằng xin hãy xem trang GitHub của chúng tôi để biết trạng thái mới nhất.
Người hỏi: Vậy chúng tôi có thể nhận được hướng dẫn fine-tuning cho Gemma 4 không?
Người trả lời: Gemma 4 đã công bố các mô hình nhỏ và trung bình vào tuần trước. Trong quá khứ, đối với Gemma 3, chúng tôi cũng đã công bố các mô hình siêu nhỏ. Nhưng đây là những mô hình đầu tiên chúng tôi phát hành cho Gemma 4 vào tuần trước. Sẽ có thêm các mô hình Gemma trong tương lai, tôi đoán vậy. Đã có một số fine-tuning có sẵn cho các mô hình lớn hơn. Nhưng đối với các mô hình siêu nhỏ mà chúng tôi đã công bố cho đến thời điểm hiện tại, nếu ai đó đang đọc hoặc nghe bài nói chuyện này trong vài tháng tới, hãy tìm kiếm thông tin mới nhất trên web. Nhưng hiện tại, các mô hình siêu nhỏ mà chúng tôi đã công bố là mô hình Gemma 3 siêu nhỏ. Và đối với hàm Gemma và Gemma 327M, có các quy trình làm việc fine-tuning có sẵn. Đối với Gemma 4, được công bố vào tuần trước, có một số quy trình làm việc, có các công thức fine-tuning trong Vertex AI và những nơi khác, tôi tin là vậy. Nhưng hãy xem các bài nói chuyện khác về Gemma vào cuối tuần này để biết thêm chi tiết.
Triển khai Mô hình Nhỏ trên Thiết bị Di động và Hệ thống Nhúng
Người nói: Ồ, vâng, ứng dụng Eloquent thực sự có sẵn trên iOS nếu ai đó muốn thử.
Người khác: Nhưng không ở Châu Âu.
Người nói: Vâng, tôi không thể...
Người khác: Ồ, vậy bạn có thể tìm thấy nó trên trình duyệt web, nhưng không có trên cửa hàng ứng dụng.
Người nói: Chà. Vậy điều đó cần được bật lên, tôi đoán vậy. Đó là một phản hồi rất hữu ích, tôi sẽ chuyển tiếp nó.
Để kết luận, những điểm chính cần rút ra là các mô hình GenAI kích thước trung bình hoặc nhỏ, theo cách nói của chúng tôi, sẽ xuất hiện trên các thiết bị di động gần bạn. Các mô hình tương tự này cũng rất tuyệt vời để sử dụng trong hệ thống nhúng, các nền tảng nhúng. Ít nhất là hiện tại, với dung lượng bộ nhớ mà chúng ta có trên điện thoại di động (không có vẻ sẽ tăng lên sớm do chi phí), các mô hình siêu nhỏ là lựa chọn hàng đầu để triển khai rộng rãi. Chúng tôi hy vọng sẽ làm cho việc này dễ dàng hơn và dễ dàng hơn, và mong muốn có những mô hình mạnh mẽ hơn nữa thông qua quan hệ đối tác với JDM. Chúng tôi cũng muốn làm cho các quy trình làm việc fine-tuning trở nên dễ dàng nhất có thể để làm cho chúng dễ tiếp cận hơn. Vâng, tôi rất vui được chia sẻ những gì chúng tôi đang làm trên cả hai mặt trận này. Chúng ta còn chín phút, nếu ai có câu hỏi nào khác, tôi rất sẵn lòng trả lời.
An toàn cho Mô hình Edge và GenAI Hệ thống
Người hỏi: Các câu hỏi về an toàn trên các mô hình edge.
Người trả lời: Trước hết, nhóm Gemma đã dành rất nhiều thời gian cho vấn đề này và tôi sẽ chuyển bạn đến họ để hỏi tất cả các câu hỏi về an toàn cho các mô hình đã được công bố tuần trước. Nhưng họ thực sự rất quan tâm đến điều này; họ đã dành rất nhiều thời gian cho an toàn của các mô hình đó.
Ngoài ra, đối với GenAI hệ thống trong AI Core chẳng hạn, những gì thực sự được triển khai ở đó – và bạn có thể sẽ nghe nhiều hơn về điều này từ những người khác – là trong GenAI hệ thống khi nó thực sự được triển khai như một phần của hệ điều hành, chứ không phải là một mô hình thô mà chúng tôi đã công bố tuần trước, nhà cung cấp hệ thống thường sẽ có một bộ kiểm tra an toàn đầu vào và đầu ra cho mô hình. Đó là một bổ sung hậu mãi vì có những điều cụ thể mà họ muốn và không muốn cho sản phẩm của họ. Vì vậy, đó là một lớp an toàn khác.
Đối với các mô hình nhỏ hơn và đặc biệt là các mô hình siêu nhỏ, an toàn thực sự quan trọng. Nhưng nhìn chung, cách chúng tôi triển khai các mô hình siêu nhỏ là trong một API hoặc tác vụ rất cụ thể. Bạn có thể hình dung với Eloquent, ứng dụng bạn đã thấy, hồ sơ rủi ro ở đó giống như một ứng dụng tái tạo (regenerative app) hơn là một ứng dụng tạo sinh (generative app), nếu bạn hiểu ý tôi. Nó sẽ không tạo ra mọi thứ hoàn toàn ngẫu nhiên. Vì vậy, bạn có thể xem xét phạm vi mà mô hình đang cố gắng thực hiện, API surface và functional surface. Thông thường, để một mô hình siêu nhỏ hoạt động, nó thường có phạm vi chức năng hẹp hơn, điều này cho phép bạn vẫn cần đảm bảo an toàn, nhưng đó là một vấn đề hẹp hơn mà bạn cần giải quyết khi xem xét nó. Đó là điều tôi muốn nói.
Triển khai Mô hình Gemma trên GPU Nvidia
Người hỏi: Có cách nào để tôi tìm hiểu cách triển khai các mô hình Gemma nhỏ hơn một chút hoặc lớn hơn một chút trên 5090 không? Vì tôi có 5090 và muốn triển khai nó để thử nghiệm. Có cách nào để tôi tìm kiếm thông tin không?
Người trả lời: Ồ, về 5090, tôi tin rằng chúng tôi không có tài liệu cụ thể cho việc đó, nhưng công cụ của chúng tôi có hỗ trợ GPU Nvidia. Nvidia cũng là đối tác của Gemma. Họ đã hỗ trợ một số lần ra mắt Gemma trong quá khứ, vì vậy có thể bạn sẽ thấy một số thông tin đó trên trang web của Nvidia thông qua Tensor TLM của họ. Tôi biết họ đã hỗ trợ một số lần ra mắt Gemma trong quá khứ, nhưng tôi không thể chỉ cho bạn tài liệu cụ thể ngay lập tức, nhưng đó là hai nơi tôi sẽ kiểm tra.
Hỗ trợ Kỹ năng Tác nhân và Multi-skill Execution
Người hỏi: Các ví dụ bạn trình bày về kỹ năng tác nhân rõ ràng là việc thực hiện một kỹ năng duy nhất. Bạn chạy kỹ năng đó, đó là một kỹ năng đơn lẻ. Liệu bạn có thay đổi kiến trúc cho multi-skill không?
Người trả lời: Đó là một câu hỏi. Chúng tôi thực sự có hỗ trợ multi-skill execution. Đây là điều mà trong ứng dụng, nếu bạn tải ứng dụng xuống, bạn có thể định nghĩa các kỹ năng bạn muốn tải. Và bạn có thể bật hoặc tắt chúng một cách dễ dàng. Sau đó, bạn có thể dễ dàng nói rằng nếu bạn rất cụ thể trong lời nhắc của mình, chẳng hạn như "tìm kiếm chủ đề này trên Wikipedia, tóm tắt thành ba gạch đầu dòng và sau đó hiển thị dưới dạng thẻ ghi nhớ." Nếu bạn thực sự cụ thể, điều đó sẽ hoạt động. Thành thật mà nói, chúng tôi chỉ mới có mô hình này vài tuần, vì vậy chúng tôi vẫn đang thử nghiệm các mô hình và xem xét giới hạn về mức độ chúng tôi có thể thực hiện skill stacking và skill chaining. Vâng, chúng tôi thực sự vẫn đang trong giai đoạn thử nghiệm. Hầu hết các ví dụ chúng tôi công bố là kỹ năng đơn lẻ, nhưng ngay cả trong ứng dụng phân tích nhật ký (diorization app), nếu bạn nhớ, Alice – người thực hiện điều đó – đã yêu cầu tóm tắt tâm trạng của cô ấy hoặc thời gian cô ấy gặp Amy, và sau đó Wikipedia sẽ xuất hiện và hỏi về bla bla bla. Vì vậy, trong ví dụ đó, cô ấy đã có thể thể hiện trong một cuộc trò chuyện duy nhất các lượt tương tác riêng lẻ bằng cách sử dụng các kỹ năng riêng lẻ. Vâng, nhưng việc skill stacking trong một lời nhắc riêng lẻ, tôi tin rằng chúng tôi đã thấy nó hoạt động khi bạn khá rõ ràng, nhưng chúng tôi cũng vẫn đang học hỏi những giới hạn về khả năng của các lớp mô hình này.
Fine-tuning và Kỹ năng Tác nhân
Người hỏi: Một câu hỏi tiếp theo. Vậy, quyết định xác định kỹ năng nào quan trọng cho vấn đề và vì đây là một mô hình nhỏ. Bạn có thực hiện instruction tuning từ một mô hình lớn hơn để xây dựng trí thông minh đó không, hay nó thực sự giỏi ở việc này?
Người trả lời: Mô hình đã được điều chỉnh để thực sự giỏi trong các quy trình làm việc của tác nhân (agentic workflows) và function calling. Nó không được huấn luyện cụ thể cho skill pattern của chúng tôi. Điều đó chỉ đến sau này, khi chúng tôi có mô hình và bắt đầu thử nghiệm, chúng tôi nhận thấy nó hoạt động và tự hỏi liệu chúng tôi có thể làm điều này không. Vì vậy, đó là một quy trình làm việc kiểu như vậy. Không có huấn luyện cụ thể cho skill structure của chúng tôi. Nhưng nhóm đã dành rất nhiều thời gian để thực hiện tư duy đa năng và function calling. Nhóm GDM đã thực hiện rất nhiều công việc tuyệt vời để cung cấp cho chúng tôi một mô hình đa năng thực sự mạnh mẽ, nhưng không có gì đặc biệt cho ứng dụng của chúng tôi. Vì vậy, nếu bạn có một cách tiếp cận kỹ năng hơi khác một chút, và có thể có một kiến trúc kỹ năng tốt hơn so với những gì chúng tôi đã trình bày hôm nay, điều đó hoàn toàn có thể. Vâng, bạn có thể mong đợi khá thành công. Không có "bí quyết bí mật" nào trong những gì chúng tôi đã trình bày.
Cửa sổ ngữ cảnh và Tối ưu hóa bộ nhớ
Người hỏi: Thử thách lớn đầu tiên là ngữ cảnh. Đặc biệt là khi bạn bắt đầu làm việc với tác nhân, bạn có thể nói một chút về cửa sổ ngữ cảnh trên E2B không?
Người trả lời: Được. Vâng, tôi sẽ chuyển câu hỏi này cho nhóm Gemma để có hướng dẫn chính thức. Các mô hình kích thước trung bình có cửa sổ ngữ cảnh là 128K, và đối với các mô hình nhỏ hơn, tôi thực sự cần kiểm tra lại.
Người khác: 32K.
Người trả lời: 32K. Vâng, tôi cũng tự hỏi liệu nó có phải là 32K không. Vì vậy, việc triển khai của chúng tôi trong thư viện mặc định là khoảng 8K hoặc 12K vì lý do hiệu suất, nhưng các mô hình E2B và 4B hỗ trợ lên tới 32K, và các mô hình khác hỗ trợ lên tới 128K.
Người hỏi: Với 32K, bạn sẽ sử dụng rất nhiều bộ nhớ.
Người trả lời: Chà, tôi tự hỏi liệu chúng tôi có số liệu thống kê về điều đó trong model card không. Đối với mô hình E2B và E4B, dung lượng bộ nhớ cần thiết cho ngữ cảnh lớn hơn không tệ như bạn nghĩ. Đã có rất nhiều tối ưu hóa, nhóm đã tối ưu hóa số liệu đó cho các mô hình này vì chúng được nhắm mục tiêu cho các trường hợp sử dụng edge. Vì vậy, lượng KV cache cần thiết cho mỗi mã thông báo đầu vào đã được tối ưu hóa. Các mô hình hoạt động khá tốt trên khía cạnh đó. Tôi không có một con số cụ thể về số byte trên mỗi mã thông báo đầu vào ngay lúc này để cung cấp cho bạn, nhưng tôi có thể nói rằng nó rất tốt cho model class của nó.
Ứng dụng AI Edge Gallery trên iOS và Android
Người hỏi: Và câu hỏi thứ hai, bạn có phiên bản iOS không?
Người trả lời: Vâng, AI Edge Gallery hoạt động trên cả iOS và Android và là mã nguồn mở.
Kế hoạch Phát triển Ứng dụng MacOS
Phiên bản Mac OS là một điểm hay. Tôi sẽ đưa nó vào danh mục "sắp ra mắt". Chắc chắn đó là một trong những mục trong danh sách việc cần làm của chúng tôi, bởi vì chúng tôi chỉ mới xuất bản ứng dụng iOS lần đầu vào tháng Giêng. Trong khi đó, ứng dụng Android đã có sẵn từ mùa hè năm ngoái. Nhưng chúng tôi thực sự mong muốn mang lại trải nghiệm "những gì bạn thấy là những gì bạn nhận được" (what you see is what you get) cho các nhà phát triển. Để họ có thể sử dụng ứng dụng, vui chơi, thử nghiệm với các mô hình, sau đó lấy mã nguồn (source code), xem cách nó được xây dựng, v.v. Vâng, đó chắc chắn là ý định của chúng tôi.
Tối ưu hóa Mô hình: Tinh chỉnh so với Kỹ năng và Lời nhắc
Có sự đánh đổi nào giữa việc tinh chỉnh các mô hình riêng lẻ cho một tác vụ cụ thể và lượng bộ nhớ thực tế mà chúng tiêu thụ trên các thiết bị không? Giống như bạn đang xâu chuỗi các mô hình lại với nhau.
(Người hỏi): Tôi vừa tải mô hình E2B.
(Trả lời): Vâng. Nếu bạn có nhiều mô hình (có thể là vậy), thì đối với mô hình E2B, chúng tôi sẽ khuyến nghị tùy chỉnh thông qua kỹ năng (skills) hoặc tạo lời nhắc (prompting), chứ không phải thông qua tinh chỉnh (fine-tuning).
LORA Tinh chỉnh cho Hệ thống Nhúng và IoT
Đối với các mô hình nhỏ hơn đã được xuất bản, chúng tôi khuyến nghị tùy chỉnh thông qua kỹ năng và tạo lời nhắc. Đối với các mô hình cực nhỏ, chúng tôi sẽ khuyến nghị tùy chỉnh thông qua tinh chỉnh nếu bạn đang triển khai một mô hình nhỏ hơn. Một con đường khác dành cho các mô hình vừa và nhỏ là tinh chỉnh LoRA (Laura fine-tuning). Tôi biết Apple hỗ trợ điều này trong framework mô hình nền tảng của họ. Bạn có thể hỏi diễn giả về AI core xem liệu điều này có nằm trong lộ trình (roadmap) của họ không. Có một diễn giả về AI core sẽ có buổi hỏi đáp (AMA) sắp tới, bạn có thể kiểm tra với anh ấy về lộ trình của họ cho vấn đề này.
Nhưng chắc chắn, nếu bạn đang triển khai nó trên một hệ thống nhúng (embedded system), ví dụ như nếu ai đó hỏi tôi về việc triển khai mô hình 2B trên một nền tảng robot (robotics platform), tôi sẽ nói rằng bạn hoàn toàn nên tinh chỉnh các LoRA cho từng công việc, từng tác vụ của bạn. Môi trường chạy (runtime) của chúng tôi hỗ trợ tải (loading) mô hình và hoán đổi nóng (hot swapping) các LoRA, vì vậy bạn thậm chí không cần phải tải và gỡ tải (unload) mô hình để tải và gỡ tải các bộ điều hợp LoRA (Laura adapters). Nó được xây dựng cho trường hợp sử dụng cụ thể đó, ví dụ như robotics hoặc các nền tảng IoT. Và những LoRA đó có thể nhỏ hơn nhiều, tùy thuộc vào kiến trúc bạn chọn. Kích thước của chúng có thể từ 16 đến 100 megabyte, hoặc thậm chí nhỏ hơn, khoảng 8 đến 100 megabyte, tùy thuộc vào kiến trúc bạn sử dụng.
TL;DR
- Đội ngũ Google AI Edge tập trung vào việc đưa các mô hình AI, đặc biệt là Gemma, đến các thiết bị biên (
edge devices) để nâng cao trải nghiệm người dùng, bảo mật quyền riêng tư và tối ưu chi phí. - Hai xu hướng chính trong AI tạo sinh trên thiết bị là System-level GenAI (mô hình lớn tích hợp vào hệ điều hành) và In-app GenAI (mô hình nhỏ được tinh chỉnh cho ứng dụng cụ thể với phạm vi tiếp cận rộng hơn).
- Các mô hình Gemma 4 mới (E2B, E4B) được tối ưu hóa cho thiết bị biên, tích hợp khả năng gọi hàm và suy luận để phát triển kỹ năng tác nhân trên thiết bị, hỗ trợ đa phương thức và có giấy phép Apache 2.0.
Điểm chính
- Ưu tiên AI biên cho các ứng dụng nhạy cảm: Triển khai mô hình trên thiết bị biên giúp cải thiện đáng kể độ trễ (latency), tăng cường quyền riêng tư bằng cách giữ dữ liệu cục bộ và giảm chi phí vận hành so với dịch vụ đám mây.
- Sử dụng bộ công cụ AI đa nền tảng của Google: Tận dụng MediaPipe, Lighter TLM và Lighter T để triển khai một tệp mô hình duy nhất (.tf_light) trên nhiều nền tảng như Android, iOS, Linux, Windows, web và thiết bị IoT (CPU/GPU).
- Phân biệt chiến lược triển khai System-level và In-app GenAI: Đối với các mô hình lớn, tổng quát (2-5 tỷ tham số), hướng tới tích hợp cấp hệ thống (ví dụ: AI core của Android). Với các mô hình nhỏ hơn, chuyên biệt (100-500 triệu tham số), ưu tiên triển khai trong ứng dụng.
- Tinh chỉnh mô hình nhỏ để đạt độ tin cậy sản phẩm: Đối với In-app GenAI, việc tinh chỉnh (
fine-tune) các mô hình ngôn ngữ siêu nhỏ (tiny LLMs) dưới 500 triệu tham số là cần thiết để đạt được hiệu suất đáng tin cậy cho các tác vụ cụ thể như tóm tắt hoặc gọi hàm. - Khai thác Gemma 4 cho kỹ năng tác nhân tiên tiến: Các mô hình Gemma 4 E2B và E4B tích hợp tính năng gọi hàm (
function calling) và suy luận (thinking), mở khóa khả năng phát triển các kỹ năng tác nhân phức tạp và đa phương thức ngay trên thiết bị. - Tối ưu hóa RAM và tận dụng bộ tăng tốc phần cứng: Khi triển khai, cần xem xét yêu cầu về RAM của mô hình (ví dụ: Gemma E2B/E4B) và ưu tiên sử dụng các bộ tăng tốc phần cứng như GPU hoặc NPU để đạt hiệu suất suy luận tối ưu trên thiết bị biên.
- Sử dụng giấy phép Apache 2.0 của Gemma: Việc các mô hình Gemma được phát hành với giấy phép Apache 2.0 tiêu chuẩn giúp dễ dàng áp dụng và tích hợp vào nhiều dự án và sản phẩm hơn.
Từ vựng
- AI edge — AI biên
- model — mô hình
- edge devices — thiết bị biên
- NPU (Neural Processing Unit) — Bộ xử lý thần kinh
- tiny LLMs — Mô hình Ngôn ngữ Lớn siêu nhỏ
- agent skills — kỹ năng Tác nhân
- latency — độ trễ
- privacy — quyền riêng tư
- fine-tune — tinh chỉnh
- Function calling — Gọi hàm
- Multimodal models — mô hình đa phương thức
- token — mã thông báo
Nội dung chi tiết
Giới thiệu về Google AI Edge và Trọng tâm Thảo luận
Xin chào, tôi là Cormbrick. Tôi làm việc trong nhóm Google AI edge, một giải pháp giúp đưa các mô hình đến edge devices. Đây là công cụ chúng tôi sử dụng nội bộ cho các sản phẩm của mình và cũng cung cấp dưới dạng sản phẩm mã nguồn mở. Là một phần của công việc này, chúng tôi hợp tác rất chặt chẽ với nhóm Gemma vì họ xuất bản nhiều mô hình nhắm mục tiêu đến các edge devices.
Về bản thân tôi, tôi đã tập trung vào Edge AI trong khoảng mười năm qua. Tôi bắt đầu vào năm 2016 bằng việc chạy Google Net trên một bộ tăng tốc phần cứng USB key được cắm vào Raspberry Pi tại Nurips 2016. Sau đó, tôi gia nhập Intel và lãnh đạo kiến trúc cho NPU được tích hợp vào tất cả các máy tính xách tay của họ ngày nay. Ba năm trước, tôi chuyển đến Google để làm tech lead cho Edge AI tại đây. Tôi rất vui được chia sẻ những gì chúng tôi đang làm và cung cấp cái nhìn tổng quan về tình hình AI trên thiết bị di động hiện nay, bao gồm trạng thái công nghệ hiện tại và các mô hình triển khai mô hình khác nhau. Hai điều tôi muốn tập trung vào trong buổi nói chuyện này là tiny LLMs (các Mô hình Ngôn ngữ Lớn rất nhỏ) và agent skills (các kỹ năng của Tác nhân). tiny LLMs là những mô hình rất nhỏ, trong khi agent skills hiện đã có thể thực hiện trên thiết bị với các mô hình lớn hơn, và chúng cần thiết để các mô hình này hoạt động trôi chảy trên thiết bị. Cả hai đều là những hướng đi mới đầy thú vị, chỉ mới trở thành hiện thực gần đây. Gần đây nhất là tuần trước, khi chúng tôi ra mắt Gemma 4 cùng với nhóm DeepMind, chúng tôi đã hỗ trợ họ bằng một ứng dụng Android và iOS đã mở ra những khả năng mới cho những gì chúng ta có thể làm trên thiết bị di động. Chúng ta sẽ đi sâu vào đó, cũng như khám phá các loại công việc có thể thực hiện với tiny models. Đó là hai phần chính của bài thuyết trình.
Tổng quan về AI trên Edge và Mô hình Gemma
Tôi sẽ bắt đầu bằng cách tổng quan về AI trên edge, xem xét các small language models (mô hình ngôn ngữ nhỏ) và tiny language models (mô hình ngôn ngữ siêu nhỏ). Sau đó, chúng ta sẽ xem xét các mô hình Gemma, vì đây là một chủ đề khá thời sự, và các loại hiệu suất mà chúng tôi đạt được với các mô hình Gemma trên các loại edge devices khác nhau, vì đây là trọng tâm công việc của nhóm chúng tôi.
Tiếp theo, chúng ta sẽ xem xét agent skills mà chúng tôi xây dựng dựa trên thế hệ mô hình Gemma mới nhất, có thể chạy trên cả Android và iOS, cũng như nhiều nền tảng khác. Nửa sau của buổi nói chuyện, chúng ta sẽ đi sâu vào tiny models: cách bạn có thể fine-tune (tinh chỉnh) và triển khai một tiny model lên edge devices. Cuối cùng, tôi sẽ giới thiệu một ứng dụng thực tế mà nhóm chúng tôi đã xây dựng, không chỉ là một ứng dụng minh họa, sử dụng các tiny LLMs dựa trên công nghệ Gemma.
Lợi ích của Edge AI
Đối với những người đã có mặt tại đây, có lẽ các bạn đã quan tâm đến Edge AI và điều này không cần phải nói thêm, nhưng thực sự có rất nhiều lợi ích khi chạy mô hình trên edge. Có những cải tiến về độ trễ (latency) hoặc trải nghiệm người dùng (UX) cho một số tác vụ rất nhạy cảm trong Agent Loop (chu trình hoạt động của Tác nhân), ví dụ như dịch giọng nói trực tiếp. Đây là tính năng mà nhóm chúng tôi đã triển khai trên Pixel vào năm ngoái, cho phép dịch giọng nói trực tiếp. Việc thực hiện tác vụ này với độ trễ yêu cầu bằng dịch vụ đám mây là rất thách thức. Do đó, khả năng thực hiện offline và trên edge là yếu tố then chốt để đáp ứng yêu cầu về độ trễ và trải nghiệm người dùng.
Quyền riêng tư (privacy) cũng là một yếu tố quan trọng. Ví dụ, mọi người sử dụng Trí tuệ nhân tạo trong các ứng dụng nhắn tin và họ muốn tin nhắn của mình được giữ nguyên trên điện thoại, được mã hóa hoàn toàn riêng tư. Đó là một ví dụ điển hình về nơi chúng ta đang thấy LLMs được triển khai để hỗ trợ các trường hợp sử dụng mà quyền riêng tư là rất quan trọng.
Sử dụng offline thì khá rõ ràng, và sau đó là tiết kiệm chi phí (savings). Chúng tôi nhận thấy điều này ngày càng trở nên phù hợp với người dùng máy tính xách tay, nơi có xu hướng mọi người thử nghiệm các small language models để thực hiện một số loại mã thông báo mà họ có thể thực hiện với agentic workflow trên máy tính để bàn. Vì vậy, một số người cũng quan tâm đến việc tiết kiệm chi phí.
Công nghệ Google Edge AI và Khả năng Triển khai Đa Nền tảng
Đội ngũ của chúng tôi tập trung vào việc giúp mọi người xây dựng ứng dụng. Chúng tôi cung cấp MediaPipe, Lighter TLM (một LLM runtime hoạt động trên thiết bị di động và edge), và Lighter T (một framework suy luận tiêu chuẩn, trước đây gọi là TensorFlow Lite). Những công nghệ này đã được sử dụng rộng rãi trong nhiều năm, ví dụ như trong Google Photos, YouTube Shorts (nếu bạn đã từng dùng các hiệu ứng vui nhộn trong YouTube Shorts, đó là những gì nhóm chúng tôi đã xây dựng cùng với nhóm YouTube, sử dụng MediaPipe và nhiều mô hình deep learning tracking bên dưới). Tất cả đều được xây dựng trên cùng công nghệ MediaPipe và Lighter T.
Ngày nay, công nghệ này chạy trên tất cả các điện thoại Android như một phần của dịch vụ hệ thống, hoặc các ứng dụng bên thứ ba xây dựng trên một phiên bản của stack được tích hợp sẵn trong Android. Tuy nhiên, stack của chúng tôi còn chạy xa hơn Android rất nhiều. Mặc dù nó có sẵn như một dịch vụ hệ thống trong Android, bạn cũng có thể lấy cùng một tệp TF light và triển khai nó lên iOS, macOS, Linux, Windows, web hoặc các IoT devices từ cùng một tệp đó. Đây là lý do tại sao việc triển khai rất hữu ích. Một lưu ý nhỏ là tệp này triển khai trên CPU và GPU. Đối với NPU, chúng tôi cần thực hiện một số biên dịch đặc biệt và bạn sẽ nhận được một tệp NPU riêng. Tuy nhiên, ngay cả với các mô hình Gemma mà chúng tôi đã xuất bản tuần trước, một tệp duy nhất có thể hoạt động trên CPU và GPU trên nhiều loại thiết bị.
Một số xu hướng mà chúng tôi đang thấy đối với LLMs trên thiết bị bao gồm các giải pháp tập trung vào quyền riêng tư, voice agents (tác nhân giọng nói) và local agents (tác nhân cục bộ) với tool calling (gọi công cụ) là một workflow rất phổ biến. Trong stack của chúng tôi, Lighter TLM là công nghệ mà chúng ta sẽ tìm hiểu kỹ hơn sau này, giúp chúng tôi chạy các tiny LLMs trên thiết bị đa nền tảng một cách nhanh chóng vì chúng tôi hỗ trợ tất cả các bộ tăng tốc phần cứng khác nhau.
Hai Xu hướng Chính trong Triển khai Generative AI trên Thiết bị
Một khái niệm quan trọng là chúng ta đang chứng kiến hai xu hướng lớn hiện nay.
1. Generative AI Cấp Hệ thống (System-level GenAI)
Đối với các mô hình rất lớn, cách chúng xuất hiện trên điện thoại di động không phải là mỗi khi bạn khởi chạy một ứng dụng, nó sẽ tải xuống một mô hình bốn tỷ tham số chỉ để giúp bạn tìm một nhà hàng ngon. Thay vào đó, xu hướng là xây dựng các mô hình lớn hơn vào trong hệ điều hành (OS). Chúng tôi gọi đây là system-level GenAI. Các mô hình này thường có khoảng hai đến năm tỷ tham số, tùy thuộc vào hệ điều hành và các yếu tố khác. Đây là lựa chọn mà chúng tôi thấy cả nhóm Android (mà chúng tôi hợp tác chặt chẽ) và nhóm Apple Intelligence đều đang thực hiện các lựa chọn tương tự, nơi có một mô hình trung tâm được tích hợp sẵn. Ví dụ, trên Android, nó được gọi là AI core, và có các API tóm tắt (summarization APIs) cùng với một bộ API ngày càng tăng cho nhà phát triển, bao gồm cả prompt API mà bạn có thể sử dụng. API này có sẵn trên các thiết bị Android cao cấp và các thiết bị Apple cao cấp (hoặc rõ ràng Apple có Apple Intelligence của riêng họ). Tuy nhiên, về mặt xu hướng, điều này rất quan trọng. Nếu bạn muốn tận dụng một mô hình được tích hợp sẵn, đây là một cách tuyệt vời để làm điều đó.
2. Generative AI Trong Ứng dụng (In-app GenAI)
Xu hướng khác mà chúng ta thấy là in-app GenAI, nơi các tiny LLMs hoặc TLMs (như chúng tôi gọi trong bài thuyết trình này) trở nên phù hợp hơn. System GenAI thường được tùy chỉnh thông qua lời nhắc hoặc kỹ năng (như chúng ta sẽ thấy sau này) và là một mô hình nền tảng được tải sẵn trên thiết bị. In-app GenAI thường được tùy chỉnh cho các tác vụ cụ thể, được tải cùng với ứng dụng hoặc trang web. Chúng tôi cũng triển khai một số mô hình này trên web, và chúng thường nhắm đến phạm vi tiếp cận rộng hơn. Điều này có nghĩa là chúng có thể hoạt động không chỉ trên các thiết bị cao cấp mà còn trên tất cả các thiết bị, vì phạm vi tiếp cận của ứng dụng rất quan trọng đối với nhiều nhóm phát triển ứng dụng mà chúng tôi làm việc.
Điều đáng ngạc nhiên là bạn có thể đạt được hiệu suất rất mạnh mẽ từ các LLMs nếu bạn fine-tune chúng cho một tác vụ duy nhất, ví dụ như các tác vụ đơn giản như tóm tắt, phiên âm, hoặc các tác vụ voice-to-action. Chúng tôi có thể đạt được hiệu suất rất đáng tin cậy từ các mô hình trong khoảng 100 đến 500 triệu tham số, tùy thuộc vào độ phức tạp của tác vụ.
Một ví dụ điển hình là chúng tôi đã ra mắt Function Gemma vào tháng 12, một mô hình 270 triệu tham số chuyên dụng cho function calling. Chúng tôi đã có thể chứng minh rằng việc thực hiện voice-to-function calling cho 10 function khác nhau có liên quan đến các nhà phát triển Android, và trong các eVals nội bộ của chúng tôi, nó đã đạt độ tin cậy từ 85 đến 90% chỉ bằng cách sử dụng mô hình rất nhỏ này. Mô hình này có thể triển khai rộng rãi cho các thiết bị iOS và Android, và bạn thực sự có thể thử nghiệm nó trong một ứng dụng mẫu mà chúng ta sẽ xem xét kỹ hơn sau này. Đó là một ví dụ về việc sử dụng tiny LLM.
Chúng tôi đang thấy các nhóm phát triển ứng dụng ngày càng quan tâm đến việc fine-tune các mô hình để triển khai dưới dạng in-app GenAI. Sự khác biệt ở đây là, bên trái (system GenAI), việc tùy chỉnh thông qua lời nhắc hoặc kỹ năng. Còn bên phải (in-app GenAI), chúng tôi khuyến khích mọi người thực hiện một mức độ fine-tuning nhất định để một tiny LLM hoạt động hiệu quả trong thực tế. Chắc chắn là đối với các mô hình dưới 500 triệu tham số, điều này đúng. Có lẽ đối với các mô hình 500 triệu tham số trở lên, chúng ta có thể thực hiện các tác vụ tổng quát hơn. Nhưng đối với các mô hình thực sự nhỏ, chắc chắn dưới 500 triệu, theo kinh nghiệm của chúng tôi, bạn cần phải fine-tune để đạt được độ tin cậy ở cấp độ sản phẩm.
Giới thiệu Gemma 4: Kích thước và Tối ưu hóa RAM
Bây giờ tôi sẽ nói về Gemma 4. Các mô hình Gemma 4 được ra mắt tuần trước thuộc vào loại system GenAI candidate. Chúng ta có thể làm nhiều điều mạnh mẽ với Gemma 4, như bạn sẽ thấy.
Trước tiên, chúng ta sẽ nói về kích thước. Có hai kích thước nhỏ là E2B và E4B. E2B được gọi như vậy vì nó chỉ cần khoảng hai tỷ tham số có mặt trong RAM để chạy mô hình, bởi vì một trong những yếu tố hạn chế mà chúng ta thấy với các mô hình này là lượng RAM bạn cần có trong thiết bị để chạy nó một cách đáng tin cậy. E4B đã được tối ưu hóa để chạy với bốn tỷ tham số trên thiết bị. Có nhiều tham số hơn được mô hình sử dụng, nhưng các tham số khác mà mô hình sử dụng là... (nhóm DeepMind có các bài nói chuyện về điều này sau trong tuần, bạn có thể tìm hiểu thêm chi tiết ở đó). Nhưng tóm lại, các tham số khác trong mô hình được sử dụng cho các per-layer embeddings. Trong runtime của chúng tôi, chúng tôi không thực sự cần tải tất cả các tham số đó. Chúng tôi cần duy trì chúng như 2B và 4B, chúng cần phải luôn nằm trong RAM. Những tham số khác, chúng tôi thường memory map chúng và chúng tôi chỉ cần tải một dòng của bảng embedding per-layer và bảng embedding một lần trong auto-regressive loop. Thực tế, chúng tôi chỉ cần tải vài trăm hoặc vài nghìn byte của nó để thực hiện next token inference.
Tối ưu hóa Mô hình và Nền tảng
Khi thực hiện suy luận, bạn không bao giờ cần phải tải toàn bộ bảng PLE vào bộ nhớ. Sau đó, tùy thuộc vào hệ điều hành, nó sẽ thực hiện khá tốt việc loại bỏ bộ nhớ được sử dụng bởi các mã thông báo PLE cũ hơn. Đó là lý do tại sao chúng tôi có ý tưởng về hiệu quả. Các mô hình nhỏ hơn chạy trên, như bạn có thể thấy ở bên phải, nhiều nền tảng khác nhau, bao gồm các mô hình E2B và E4B. Các mô hình này nằm trong lộ trình của AI core. Các mô hình này hiện có sẵn để thử nghiệm. Vào một thời điểm thích hợp trong tương lai, đội ngũ Android sẽ tích hợp chúng vào AI core và chúng sẽ có sẵn rộng rãi hơn trên nhiều loại thiết bị. Ngoài ra, sẽ có một buổi nói chuyện khác vào tuần tới, hoặc một buổi nói chuyện trong tuần này từ Olli của đội AI core, người có thể chia sẻ thêm chi tiết về lộ trình đó trông như thế nào. Và cũng có Omar từ đội GDM sẽ đi sâu hơn vào toàn bộ thế giới Gemma. Hai mô hình cuối cùng, chỉ để tham khảo, cũng liên quan đến biên, nhưng không phải là trọng tâm của buổi nói chuyện của tôi hôm nay. Vì những mô hình này phù hợp để mọi người chạy trên máy tính xách tay. Kích thước đã được tối ưu hóa để chạy thực sự tốt trên máy tính xách tay tiêu dùng, mặc dù là những máy tính xách tay có thể có 32 gigabyte RAM. Nhưng đó là những gì các mô hình này hướng tới. Vì vậy, tôi sẽ ít tập trung vào hai mô hình này, mặc dù chúng rất mạnh mẽ và hữu ích. Chắc chắn, mô hình E4B, cũng như mô hình E2B, đều có hiệu suất xuất sắc trên nhiều khía cạnh về tri thức và suy luận. Một trong những cải tiến lớn so với thế hệ trước, từ góc độ người dùng mô hình, là chúng đã tích hợp tính năng gọi hàm (function calling), điều này rất tuyệt vời, và chúng cũng có tính năng suy luận (thinking) tích hợp. Sự kết hợp giữa suy luận và gọi hàm này là thứ mở khóa khả năng của chúng tôi để thực hiện các kỹ năng trên thiết bị. Như bạn sẽ thấy trong giây lát, chúng ta có thể mô tả một kỹ năng, cung cấp cho mô hình, và mô hình có thể tự động tiếp nhận và sử dụng nó. Điều này cho phép chúng tôi sử dụng mô hình đó, vốn đã trở nên rất phổ biến trong vài tháng qua, để đưa mô hình đó lên thiết bị di động, tạo ra những loại trải nghiệm di động mới. Ngoài ra, đối với E2B và E4B, đây là các mô hình đa phương thức (multimodal), nghĩa là chúng hỗ trợ âm thanh, hình ảnh và văn bản. Các mô hình lớn hơn chỉ hỗ trợ hình ảnh và văn bản. À, một thay đổi khác từ góc độ triển khai là đây là lần đầu tiên các mô hình Gemma được phát hành với giấy phép Apache 2.0 tiêu chuẩn, nghĩa là chúng dễ sử dụng hơn cho nhiều người hơn. Một lần nữa, bạn sẽ nghe thêm về điều này trong buổi nói chuyện của Omar. Tôi chỉ muốn đề cập ở đây.
Gemma trên Môi trường Chạy và Nền tảng của Chúng tôi
Vậy đó là Gemma nói chung. Bây giờ, chúng ta sẽ đi sâu vào Gemma trên môi trường chạy và nền tảng của chúng tôi. Vâng, bức tranh tương tự như trước đây: chúng tôi có một tệp TLM nhẹ duy nhất, là một tệp Lite Runtime chứa các thứ như bộ mã hóa từ vựng và các thứ khác mà chúng tôi cần trong một gói để chạy một mô hình. Mô hình duy nhất đó chạy trên tất cả các loại thiết bị này, bao gồm di động, máy tính để bàn và nhúng. Và chúng tôi thực sự rất hào hứng khi làm nhiều hơn trong không gian thiết bị nhúng. Đặc biệt với đầu vào hình ảnh, có rất nhiều tiềm năng cho các trường hợp sử dụng IoT mới.
Hiệu suất của Mô hình
Đây là một biểu đồ khá chi tiết, nhưng chỉ để đi sâu vào hiệu suất. Tôi muốn nói rằng đây là một ảnh chụp nhanh tính đến hôm nay. Đây là điều mà chúng tôi tiếp tục phát triển, cả bản thân chúng tôi, đội ngũ của chúng tôi, và cả với các đối tác khác nhau mà chúng tôi có, như Intel, đội ngũ Raspberry Pi và đội ngũ Qualcomm. Chúng tôi tiếp tục tối ưu hóa tất cả các con số này. Nhưng chúng ta có thể thấy rằng, đối với mô hình 2 tỷ tham số, chúng ta có thể đạt được hiệu suất thực sự hấp dẫn trên một chiếc điện thoại Android cao cấp, có thể xử lý hàng nghìn mã thông báo mỗi giây trên một GPU, cũng như hàng nghìn mã thông báo mỗi giây trên MacBook. Nhưng hai hàng cuối cùng là trên Raspberry Pi, chúng ta có thể đạt khoảng 133 mã thông báo mỗi giây, đủ để thực hiện các trường hợp sử dụng phân tích hình ảnh đơn giản với độ trễ hợp lý. Và dòng cuối cùng là chúng tôi đang chạy trên một bộ tăng tốc phần cứng. Đây là một nền tảng phát triển robot IoT của Qualcomm mà họ có sẵn, và ở đó chúng tôi cũng có thể thấy hiệu suất khá hấp dẫn vì chúng tôi đã sử dụng NPU, mang lại hiệu suất tốt hơn nhiều. Và sau đó, bạn có thể tưởng tượng, chúng tôi có hiệu suất tương ứng trên mô hình E4B, hoạt động trên nhiều loại thiết bị với hiệu suất điền trước và giải mã ít hơn theo tỷ lệ, đúng không? Với kích thước và số lượng tham số mà chúng ta cần tìm nạp. Nhưng nhìn chung, chúng có sẵn trên rất nhiều nền tảng.
Khả năng của Mô hình: Kỹ năng Tác nhân trên Thiết bị
Vậy, chúng ta có thể làm gì với những mô hình đó? Rất nhiều điều. Một trong những điều tôi muốn nói thêm vì nó hoàn toàn mới, thay vì chỉ cho bạn xem phân tích hình ảnh, chuyển giọng nói thành văn bản hoặc dịch âm thanh, là có rất nhiều điều chúng tôi đã có thể làm với các mô hình từ góc độ của tôi trong một thời gian, mà các mô hình Gemma 4 tốt hơn nhiều so với các phiên bản tiền nhiệm. Nhưng điều mới mẻ nhất từ góc độ của tôi là các kỹ năng tác nhân trên thiết bị. Vì vậy, chúng tôi có một ứng dụng, tôi không biết các bạn đã thấy chưa, nó có sẵn trên cả iOS và Android, được gọi là Google AI Gallery. Và ứng dụng này cho phép bạn thực hiện nhiều điều khác nhau, như thực hiện các cuộc trò chuyện AI cơ bản, hỏi về một hình ảnh, hoặc thực hiện các trường hợp sử dụng chuyển giọng nói thành văn bản hoặc dịch bắt đầu từ âm thanh, hoặc các trường hợp sử dụng chuyển âm thanh thành gọi hàm. Nhưng cái mà tôi sẽ đi sâu hơn hôm nay là kỹ năng tác nhân, cái thứ hai từ bên trái.
Hy vọng điều này sẽ chạy. [transcript bị gián đoạn]
Demo Ứng dụng Kỹ năng Tác nhân
Chào buổi sáng. Hãy ghi một mục nhật ký tâm trạng mới với trường học. Vì cái này đang phát, nhưng âm thanh không hoạt động. Tôi đã ngủ đủ tám tiếng và mong chờ được đi chơi với Amy hôm nay. Đây là một ứng dụng kỹ năng nhật ký mà chúng ta đang xem ở đây. Hoặc một công cụ theo dõi tâm trạng nơi bạn ghi lại tâm trạng và giấc ngủ. Và sau đó hoàn hảo phân tích xu hướng tâm trạng của tôi trong bảy ngày qua.
Vậy, điều đang xảy ra ở đây là với ứng dụng theo dõi tâm trạng, nó ghi lại tâm trạng hoặc các quan sát của bạn vào nhật ký, và sau đó LLM có thể quay lại và tóm tắt nội dung mà bạn đã kiểm tra lịch của tôi.
Điều thú vị ở đây là đây chỉ là danh sách có dấu đầu dòng.
Được rồi, tôi sẽ không lặp lại điều này nữa. Điều thú vị ở đây là cách thực hiện điều này, mà chúng ta sẽ xem chi tiết hơn. Đây không phải là một tinh chỉnh tùy chỉnh. Chỉ đơn giản là chúng tôi cung cấp một kỹ năng cụ thể với một chút JavaScript mà mô hình có thể gọi cho mô hình, và sau đó thông qua giao diện văn bản tự do, bạn có thể, mô hình có thể sử dụng và tiếp nhận kỹ năng đó. Vì vậy, nó cũng có thể gọi hai kỹ năng thực sự đang diễn ra ở đây. Một là kỹ năng theo dõi tâm trạng, và cái kia là kỹ năng kiểm tra Wikipedia để biết thông tin mới nhất. Cái kia là kỹ năng bản đồ và bây giờ nó đang sử dụng kỹ năng truy vấn Wikipedia ở đây để tìm kiếm thông tin mới nhất từ giải Oscar. Vì vậy, thay vì có một mô hình chỉ bị giới hạn về thời gian, giờ đây việc mở rộng mô hình bằng các kỹ năng như tra cứu bản đồ, một cái gì đó như nhật ký tương tác mà bạn có thể thêm và bớt các mục từ giọng nói cũng như truy vấn, và cũng như thêm kiến thức hiện đại hơn hoặc kiến thức liên quan, trở nên thực sự dễ dàng. Vì vậy, chúng tôi đang trình diễn liệu bạn có thể ghép sự rung cảm này với chúng tôi đang trình diễn Wikipedia trong trường hợp này. Ồ, đây là một kỹ năng thú vị khác mà ai đó trong nhóm cũng đã phát triển là kỹ năng âm nhạc tâm trạng, nó gọi một dịch vụ web để sáng tác nhạc dựa trên một hình ảnh duy nhất và phát nó. Vì vậy, vâng, nó có thể sáng tác một số nhạc lo-fi để đi kèm với bữa sáng của một người dùng, nhưng đó là một mô hình mới, một mô hình mới về cách chúng ta có thể thực sự, thực sự, thực sự dễ dàng mở rộng các mô hình và làm điều đó theo một cách ít mã (low-code) như bạn cũng sẽ thấy một chút khi chúng ta đi sâu vào cách hoạt động của nó dưới lớp vỏ.
Các Trường hợp Sử dụng và Cách Xây dựng Kỹ năng
Vâng, các ví dụ ở đây, và tôi sẽ không phát tất cả các video này, có thể để tiết kiệm thời gian vì tôi nghĩ bạn đã thấy nhiều trong số đó. Một là chúng ta có thể bổ sung cơ sở tri thức là một mô hình mà chúng ta thấy thú vị. Chúng ta có thể tạo ra nội dung tương tác phong phú như thẻ học (flashcards) để hình ảnh hóa. Và tôi, vâng, nơi chúng ta có thể, thay vì nếu bạn yêu cầu tóm tắt một cái gì đó trong ba gạch đầu dòng, bạn có thể có một kỹ năng JavaScript để hiển thị các gạch đầu dòng đó dưới dạng một thẻ. Vì vậy, bạn chỉ cần nói "tóm tắt và hiển thị một thẻ" hoặc "tóm tắt cái này", và nếu nó nghĩ rằng hiển thị thẻ sẽ hữu ích hơn cho người dùng, điều đó sẽ được sử dụng, hoặc tổng hợp âm nhạc. Được rồi, tôi sẽ bỏ qua một chút từ các bản demo đến cách chúng tôi xây dựng chúng.
Cách Xây dựng Kỹ năng Hiệu quả và Truy cập Công cụ
Vậy điều thực sự đang xảy ra là cách chúng tôi xây dựng các kỹ năng là chúng rất hiệu quả. Vì vậy, các hướng dẫn có thể được tải theo yêu cầu. Điều này sử dụng một nguyên tắc mà bạn có thể đã thấy ở nơi khác về việc tiết lộ dần dần có điều kiện hoặc độ sâu có điều kiện. Vì vậy, thay vì trong một quy trình làm việc MCP nơi bạn cần mô tả mọi thứ về tất cả các hàm mà bạn cần, cách chúng tôi cấu trúc các kỹ năng là có một mô tả một dòng. Các mô tả một dòng của các kỹ năng là những gì tác nhân nhìn thấy, và sau đó nếu nó nghĩ rằng điều đó nghe có vẻ thú vị, thì nó sẽ yêu cầu thêm. Nó yêu cầu tải kỹ năng. Nó có một kỹ năng mà chúng tôi dạy nó để tải một kỹ năng. Và sau đó nó đi vào và tải kỹ năng và tìm ra tất cả các chi tiết về cách sử dụng nó, các gọi hàm nào nó có thể sử dụng để thực hiện kỹ năng đó. Mô hình này đặc biệt quan trọng đối với hiệu quả mã thông báo và thành thật mà nói là độ tin cậy trên các mô hình biên, bởi vì nếu chúng ta phải tải tất cả các chi tiết cho tất cả các kỹ năng vào mô hình biên, đó sẽ là rất nhiều ngữ cảnh để mô hình suy luận, và trong một mô hình nhẹ hơn, điều đó cuối cùng sẽ làm giảm hiệu suất, đúng không? Bởi vì các mô hình nhẹ hơn rất tuyệt vời để chạy trên thiết bị, nhưng về khả năng suy luận trên các cửa sổ ngữ cảnh rất, rất dài. Nếu bạn có thể có một cửa sổ ngữ cảnh cô đọng hơn, điều đó sẽ nâng cao "tỷ lệ thành công" của bạn về các số liệu chất lượng mà bạn đang xem xét để phát hành một ứng dụng cụ thể.
Phần thứ hai là truy cập công cụ. Nó giúp chúng tôi tích hợp các công cụ mới một cách động. Vì vậy, những thứ như, chúng tôi nghĩ về chúng theo cách có một tập hợp các công cụ đầu vào như làm thế nào để có thêm thông tin, đó có thể là Wikipedia hoặc tra cứu một dịch vụ thời tiết hoặc một cái gì đó tương tự. Sau đó có một tập hợp các điều hữu ích để trình bày đầu ra mới cho người dùng như hiển thị một cái gì đó trên bản đồ hoặc hiển thị một cái gì đó qua thẻ. Vì vậy, bạn có thể có các kỹ năng để mở rộng cả đầu vào và đầu ra, các mô hình đầu ra mà một mô hình có thể thực hiện. Và cũng giúp chúng tôi đưa vào các cơ sở tri thức chuyên biệt theo lĩnh vực. Vì vậy, kỹ năng đang gọi Wikipedia đó, bạn có thể dễ dàng tưởng tượng nó gọi một CRM nội bộ của khách hàng hoặc hỏi dữ liệu từ một hệ thống RAG cục bộ.
Cấu trúc và Hỗ trợ Kỹ năng
Trong cấu trúc các kỹ năng của chúng tôi, chúng tôi có tệp skill.md, và tùy chọn đi kèm là các script hoặc asset. Tệp skill.md chứa metadata mà chúng tôi luôn xử lý. Ví dụ, việc trích xuất văn bản và bảng từ tệp PDF sẽ kích hoạt kỹ năng này. Các hướng dẫn chỉ được tải khi mô hình nhận thấy nó yêu cầu kỹ năng đó. Pattern này đặc biệt quan trọng. Ngoài ra, trong phần script, chúng tôi cũng hỗ trợ mọi người viết các JavaScript tùy chỉnh có thể được hiển thị trong ứng dụng, vì đây là một cách rất dễ dàng để mở rộng cả trong hệ thống iOS và Android.
Quy trình Kích hoạt Kỹ năng
Đi sâu hơn một chút, chúng tôi có lời nhắc hệ thống riêng được tích hợp sẵn với ứng dụng. Sau đó, có một tập hợp các mô tả kỹ năng được thêm vào lời nhắc hệ thống. Khi người dùng yêu cầu điều gì đó, mô hình sẽ quyết định kích hoạt kỹ năng bằng cách đọc metadata của nó. Sau đó, nó gọi ứng dụng tải kỹ năng mà chúng tôi có bên dưới. Phản hồi công cụ từ API call đó chính là nội dung của tệp skill.md. Nội dung này sau đó nằm trong cửa sổ ngữ cảnh. Vì vậy, mô hình bây giờ biết về các chức năng này. Và sau đó nó gọi hàm chạy. À vâng, nó cũng chứa một số JavaScript và sau đó chúng tôi gọi công cụ chạy JavaScript, thực thi JavaScript mà chúng tôi đã lấy từ tệp kỹ năng và sau đó chúng tôi cũng gọi phản hồi trên đó.
Giải mã có ràng buộc và Độ tin cậy
Một điều khác cần đề cập như một phần của quy trình làm việc này là một trong những điều chúng tôi đã làm khi triển khai chức năng Gemma để tăng độ tin cậy, đó là trong thời gian chạy (runtime), chúng tôi áp dụng giải mã có ràng buộc (constraint decoding). Tuy nhiên, nó được tinh chỉnh để chỉ áp dụng cho đầu ra khi chúng tôi tạo ra hoặc gọi một công cụ. Chúng tôi cũng có thể giải mã có ràng buộc để giới hạn nó chỉ cho công cụ cụ thể mà bạn cần gọi. Vì vậy, trong hệ thống này, thay vì chỉ có các ràng buộc JSON chung chung, chúng tôi biết rằng có một tập hợp hữu hạn các công cụ mà mô hình được cho là có thể sử dụng. Do đó, chúng tôi có thể có giải mã có ràng buộc mạnh mẽ hơn. Điều này cũng giúp chúng tôi có một hệ thống đáng tin cậy hơn nói chung bằng cách sử dụng giải mã có ràng buộc mạnh mẽ hơn. Chúng tôi thấy rằng điều này rất hữu ích cho mô hình hai tỷ tham số. Khi các mô hình trở nên có khả năng hơn, chúng tôi nhận thấy lợi thế từ loại giải mã có ràng buộc nghiêm ngặt này ít cần thiết hơn khi bạn chạy một mô hình rất lớn (ví dụ: mô hình 10 tỷ tham số). Tuy nhiên, đối với các mô hình rất nhỏ trên thiết bị, đây là một công cụ rất hữu ích giúp chúng tôi có hàng rào bảo vệ mạnh mẽ hơn cho mô hình, để chúng tôi có thể nâng cao chất lượng và có được sản phẩm hữu ích trong sản xuất.
Bật/Tắt và Kỹ năng Tùy chỉnh
Sau đó, trong ứng dụng, chúng tôi hỗ trợ bạn có thể bật/tắt các kỹ năng mà bạn muốn sử dụng. Ngay cả với các mô tả kỹ năng, bạn cũng có thể quyết định muốn có bao nhiêu mô tả kỹ năng hoạt động tại bất kỳ thời điểm nào. Ví dụ này đang tải một kỹ năng chơi piano ảo, cho phép bạn chạm vào các phím và phát ra âm thanh. Vâng, đây chỉ là những thứ liên quan đến JavaScript. Nhưng sau đó, bạn cũng có thể tải các kỹ năng tùy chỉnh. Bạn có thể tự viết một kỹ năng và tải nó từ một URL, điều này khá thú vị. Nếu bạn muốn thử nghiệm việc tạo mẫu một kỹ năng với Gemma cho một ý tưởng ứng dụng mà bạn có, đây là cách bạn thực hiện. À, các kỹ năng cũng có thể có Khóa API (ví dụ: secret key). Vì vậy, nếu bạn cần sử dụng một dịch vụ web, bạn có thể nhắc người dùng nhập Khóa API. Ví dụ này đang trình bày lại ví dụ về âm nhạc theo tâm trạng. Chúng tôi có một cuộc thảo luận trên GitHub nơi người dùng đang đăng các kỹ năng mà họ đã tự viết. Và các kỹ năng trong cộng đồng mà chúng tôi thích, chúng tôi sau đó có thể đưa lên và coi là các kỹ năng nổi bật trong ứng dụng. Vì vậy, nếu có điều gì đó được phát triển bởi mọi người, chúng tôi có thể có một cách để giới thiệu các kỹ năng cộng đồng hữu ích cho cộng đồng rộng lớn hơn. Đây là kỹ năng của bên thứ ba. Tôi nghĩ điều này sẽ cho chúng ta thấy. Được rồi, đây là việc thêm một kỹ năng giới thiệu động vật. Đây giống như một thứ dành cho trẻ em. Nó có rất nhiều kỹ năng vào ứng dụng. Vâng. Nhưng điểm mấu chốt ở đây là có một rào cản rất thấp để mở rộng mô hình theo cách có liên quan đến người dùng ứng dụng cuối. Vì vậy, điều này rất dễ dàng và chúng ta sẽ đi sâu hơn một chút để xem nó dễ dàng đến mức nào.
Kiến trúc Kỹ năng và Bộ Điều phối
Kiến trúc kỹ năng, khi chúng ta đi sâu hơn một bước, điều này khá phù hợp. Chúng ta có bộ điều phối (orchestrator) riêng. Nó có một registry kỹ năng và chúng ta gọi kỹ năng tải kỹ năng để tải các kỹ năng. Trong các kỹ năng đó, có kỹ năng JavaScript và có ý định gốc (native intents). Cụ thể trong hệ thống Android, chúng ta có thể gọi các ý định hệ thống Android hoặc ý định gốc, và bạn có thể gọi chúng trong kỹ năng của mình. Chẳng hạn như nếu bạn muốn bật và tắt Wi-Fi. Vì vậy, các ý định được hiển thị cho tất cả Android và có sẵn trong JavaScript bạn chắc chắn có thể sử dụng. Sau đó, có skill.md đóng vai trò persona và dữ liệu kịch bản, và sau đó có kỹ năng và tài nguyên cụ thể. Như tôi đã nói trước đây, điều này có thể bao gồm JavaScript chạy hoàn toàn cục bộ, đây là một trải nghiệm ngoại tuyến hoàn chỉnh, hoặc như trong ứng dụng soạn nhạc, chúng tôi thực sự đã gọi một API web và cần một Khóa API mà người dùng đã được nhắc nhập, và điều đó cũng hoạt động trong gallery. À, vậy thì, các công cụ được định nghĩa trước mà chúng tôi có bên dưới để cung cấp một mô hình tinh thần về cách nó hoạt động là chúng tôi có tải kỹ năng giúp chúng tôi tải kỹ năng, chạy JavaScript hoặc chạy ý định. Và chỉ cần bộ điều phối sử dụng ba kỹ năng này là có thể làm cho toàn bộ hệ thống hoạt động.
"Hãy kiểm tra hiệu quả của chúng ta." Đây là từ quản lý sản phẩm
Geminicủa chúng tôi cho thấy: >> "Tốt nhất là đặt nhà hàng. Vui lòng trả lời tôi bằng tiếng Anh."
Phát triển Kỹ năng với Gemini CLI
Kỹ năng này là "xổ số nhà hàng" (restaurant roulette). Vâng, chúng tôi thực sự có khoảng 80 kỹ năng như vậy bởi vì việc phát triển kỹ năng rất dễ dàng bằng cách sử dụng anti-gravity hoặc Gemini CLI. Chúng tôi có rất nhiều lựa chọn để thể hiện và mọi người rất vui khi phát triển chúng. Ở đây, chúng ta có thể xem cấu trúc của "xổ số nhà hàng". Vâng, đây là phần bên dưới. Nó yêu cầu secret là true. Được rồi. Chúng tôi muốn lấy một Khóa API và nó tìm kiếm 10 nhà hàng. Sau đó, nó trả về địa điểm và ẩm thực.
Và đây là tệp index.js, nơi chúng ta có thể có một web view đơn giản, sau đó chúng ta đã render để có được vòng quay thực tế. Bạn rõ ràng có thể tự mã hóa tất cả những điều này, và có mã nguồn đầy đủ ở đây cho các ví dụ Claude Code mà chúng tôi chưa từng xuất bản, nhưng nó hoạt động rất tốt trong Claude Code. Chúng tôi có cả mã nguồn cho ví dụ và skill spec để bắt đầu. Và có đầy đủ hướng dẫn trên GitHub nếu bạn muốn thử viết kỹ năng của riêng mình. Nhưng đây là mô hình mà chúng tôi thực sự sử dụng nhiều nhất: sử dụng các kỹ năng để viết kỹ năng. Tức là, sử dụng một cái gì đó như Gemini CLI hoặc Claude Code hoặc anti-gravity. Đây là mô hình yêu thích của chúng tôi, nơi chúng tôi chỉ cần nói: "Này, tôi muốn viết một kỹ năng cho AI edge gallery." Ví dụ này hoạt động trong Gemini CLI, nơi chúng tôi chỉ cần nói: "Này, đây là tài liệu, đây là một số ví dụ về các kỹ năng mà bạn có thể đọc." Sau đó, đây là kỹ năng tôi muốn xây dựng, đó là offline archiver.
À vâng, ý tưởng là khi bạn chụp ảnh quanh London chẳng hạn, nó sẽ có thể cung cấp cho bạn thông tin như: "Có bức tượng Churchill tuyệt vời đó tôi đã đi qua." Nó có thể tìm kiếm một chút về Churchill cho bạn và sau đó trên chuyến bay trở về, bạn có thể quay lại kỹ năng này và nó sẽ có một loạt thông tin về những thứ bạn đã thấy mà bạn có thể đọc trên chuyến bay về nhà. Tôi nghĩ đó là nguồn cảm hứng cho kỹ năng này. Vâng, nó tìm nạp nội dung Wikipedia và sau đó lưu trữ cục bộ và sau đó có một index.
Ngoài ra, với CLI, chúng tôi cũng có thể yêu cầu, bởi vì chúng tôi có một kỹ năng ADB trong Gemini CLI, bạn cũng có thể yêu cầu nó tự kiểm tra kỹ năng bằng cách nói: "Này, bạn có quyền truy cập vào một điện thoại được kết nối qua ADB." Và sau đó Gemini CLI sử dụng kỹ năng ADB Android của nó để kiểm tra xem ứng dụng thực sự hoạt động và kỹ năng đang làm những gì nó nói trong ứng dụng, và chúng ta chỉ cần yêu cầu nó lặp lại. Và nó sẽ tự thực hiện một số xác thực cơ bản và trả về. Vâng. Vì vậy, tôi nghĩ đây sẽ là, nếu điều này phát, đây sẽ là một ví dụ về việc làm điều đó.
Đây là chúng tôi đang sử dụng Gemini CLI để làm điều đó. Và điều này hoạt động rất mạnh mẽ. Tôi nghĩ trong số khoảng 80 kỹ năng mà đội ngũ đã làm nội bộ, có lẽ hơn một nửa là các kỹ năng được mã hóa "kiểu ý tưởng" (vibe coded skills) ít nhất là ban đầu, điều này thực sự giảm bớt rào cản cho mọi người để mở rộng một Mô hình Ngôn ngữ Lớn (LLM) để làm những điều mới theo cách hữu ích cho đối tượng của họ.
Kích thước Mô hình và Dự án Mã nguồn mở
"Tất cả các ví dụ ở đây đang chạy trên
mô hìnhnhỏ nhất trongứng dụnghay trênthiết bị?" Tất cả các ví dụ ở đây mặc định. Đó là một câu hỏi hay. Vậy câu hỏi cho bản ghi âm là: tất cả các ví dụ có đang chạy trênmô hìnhnhỏ nhất không? Trong trường hợp này, các ví dụ đang chạy trênmô hình 4B. Đúng vậy.Mô hình 2B, cáckỹ năngcũng sẽ hoạt động vớimô hình 2Bvà bạn có thể thử điều đó. Nhưng, vâng, hiệu suất của bạn có thể khác nhau, ví dụ như cáckỹ năngđơn giản hơn, ítkỹ nănghơn, v.v. Nhưng tất cả các ví dụ bạn đã thấy đang chạy trênmô hình 4B. "ThửChrome CVP." "À, thử làm một phiên bảnkỹ năngtrongChrome." "Vâng. Tức là, sử dụngChrome CVPvớikỹ năngđể thực sự sử dụng mộtmô hình cục bộđể hoạt động trong trình duyệt của bạn." "Chúng tôi chưa làm điều đó. Không." "Vâng. Đó là một điều thú vị để thử."
À vâng. Và đây là lời giới thiệu nhanh về liên kết này. Một vài điều về gallery mà tôi cũng nên đề cập: gallery là một dự án mã nguồn mở và dự án mã nguồn mở này được xây dựng dựa trên công cụ lite hoặc TLM mà bạn đã thấy trước đó trong phần giới thiệu. Vì vậy, ứng dụng này, ngoài việc là một thứ thú vị để sử dụng, bạn có thể tạo mẫu ý tưởng ứng dụng hoặc xem: "Wow, điều này có thể thực hiện được trong mô hình trên điện thoại không? Hoặc nó sẽ nhanh đến mức nào nếu tôi chạy nó trên điện thoại? Hoặc loại kỹ năng này thực sự có khả năng thực hiện không?" Ngoài việc có thể tạo mẫu mô hình, bạn cũng có quyền truy cập đầy đủ vào mã nguồn ở đây. Và mô hình cũng cho phép, hoặc xin lỗi, và nó cũng được xây dựng dựa trên cùng một cơ sở hạ tầng như mã nguồn mở lite T và cơ sở hạ tầng tăng tốc lite TLM bên dưới. Vì vậy, nếu bạn thấy điều gì đó bạn thích trong gallery, bạn biết rằng, vâng, bạn cũng có thể triển khai mô hình gemma theo một cách khác.
API Nguồn Mở và Kỹ Năng Cộng Đồng
Nhưng nếu bạn muốn có trải nghiệm hoặc tốc độ tương tự, bạn có thể sử dụng các API nguồn mở cơ bản và tải một mô hình từ trang Hugging Face của chúng tôi (mà chúng ta sẽ xem xét kỹ hơn một chút) và chạy trực tiếp mô hình đó. Là một phần trong đó, chúng tôi cũng có một bộ thảo luận trên gallery, nơi hiển thị một số kỹ năng cộng đồng đã được tải lên, từ các thứ như giải trí cho mèo đến blackjack. Nếu bạn phát triển một kỹ năng, hãy đăng nó tại đây để những người khác trong cộng đồng dễ dàng tìm thấy hơn. Sau đó, những kỹ năng nào có vẻ hấp dẫn hoặc hữu ích cho nhiều người, chúng tôi có thể thêm vào danh sách kỹ năng ưu tiên của bên thứ ba trong ứng dụng, giúp mọi người dễ dàng khám phá hơn. Chúng tôi đã thấy một lượng tương tác đáng kể đối với phần này vào cuối tuần qua, mặc dù nó chỉ mới ra mắt từ thứ Năm tuần trước.
Chuyển Hướng sang Mô Hình Nhỏ (Tiny Models) cho Ứng Dụng
Mọi thứ chúng ta đã thấy với các kỹ năng thực sự áp dụng cho mô hình 2B và 4B, chủ yếu trên điện thoại di động sẽ được sử dụng cho các ứng dụng như system genis, nơi chúng sẽ thực sự được đưa vào sản xuất. Chắc chắn, đối với IoT hoặc máy tính để bàn, hoặc các ứng dụng biên (edge applications), bạn có thể tự tải mô hình đó và chạy các trường hợp sử dụng kỹ năng này trong sản xuất trên các nền tảng Qualcomm IoT mà chúng ta đã thấy trước đó, chẳng hạn. Nhưng để triển khai các mô hình trong ứng dụng hiện nay và đưa chúng vào các ứng dụng sản xuất, chúng tôi thấy ngày càng nhiều người đang sử dụng các mô hình nhỏ hơn để làm điều đó. Chúng tôi gọi đây là mô hình siêu nhỏ (tiny models), tức là các mô hình có ít hơn 1 tỷ tham số theo quan điểm của chúng tôi. Đây là những thứ mà chúng tôi hợp tác với các nhóm để triển khai Mô hình Ngôn ngữ Lớn (LLMs) trong ứng dụng của họ. Đây là những loại hình mà chúng tôi đang thấy. Vì vậy, tôi muốn xem xét nhanh quy trình làm việc đó trông như thế nào.
Lighter TLM: Động Cơ Cho Mô Hình Nhỏ
Lighter TLM là động cơ cung cấp năng lượng cho gallery và bản thân nó là một dự án nguồn mở có các C++ APIs và Java APIs. Các Swift APIs sẽ sớm ra mắt. Nó cũng có một Python API kể từ tuần trước, khá phù hợp cho các nhà phát triển IoT thích làm việc với Python. Nó nhận một tệp LLM và có các thành phần cần thiết để chạy hoàn chỉnh một auto-regressive loop và hiển thị nó thông qua các API dễ sử dụng. Vâng, đó là các C++ APIs đa nền tảng, và khi thích hợp, cùng một API có thể được sử dụng với hardware acceleration (tăng tốc phần cứng) như ví dụ về Qualcomm. Chúng tôi cũng đã xuất bản các mô hình nhỏ hơn khác trong quá khứ. Chúng tôi chưa xuất bản phiên bản này cho Gemma 4, nhưng trong quá khứ, chúng tôi cũng đã xuất bản các mô hình hoạt động trên MediaTek silicon cũng như Intel silicon. Vâng, trong suốt năm nay, và khi ngày càng có nhiều mô hình nhỏ hơn có sẵn, chúng ta sẽ thấy sự hỗ trợ NPU rộng rãi hơn.
Quy Trình Làm Việc Triển Khai Mô Hình Nhỏ
Vậy quy trình làm việc là bạn bắt đầu từ transformers. Chúng tôi sử dụng một gói có tên là lighter t torch có thể thực hiện một số PyTorch native optimizations (tối ưu hóa PyTorch gốc) để tối ưu hóa cho lighter t và cũng có tích hợp quantization (lượng tử hóa) vào quy trình làm việc. Sau đó, điều này sẽ tạo ra một tệp lighter TLM. Bạn có thể triển khai nó, hoặc thử nghiệm với ứng dụng gallery hoặc triển khai trực tiếp vào trường hợp sử dụng ứng dụng sản xuất của bạn bằng lighter TLM trên bất kỳ nền tảng nào bạn muốn làm việc. Vâng, đây là một cái nhìn khác về quy trình làm việc đó.
API Lighter T Torch Generative cho Các Trường Hợp Nâng Cao
Đối với các trường hợp sử dụng thực sự nâng cao, chúng tôi có lighter t torch generative API. Vì vậy, nếu bạn thực sự muốn tự viết mô hình siêu nhỏ của riêng mình từ đầu và đào tạo nó từ đầu, chúng tôi cũng hỗ trợ quy trình làm việc đó, cũng như quy trình làm việc tinh chỉnh tiêu chuẩn. Và có một API được gọi là torch generative API cho phép bạn, về cơ bản, nó có các khối xây dựng (building blocks) cho Mô hình Ngôn ngữ Lớn (LLMs) hỗ trợ nhiều LLMs là PyTorch gốc theo cách mang lại hiệu suất thực sự tốt khi bạn chạy chúng trên thiết bị. Vâng, đó là quy trình làm việc.
Kiến Trúc Triển Khai NPU và Thư Viện Tối Ưu Hóa
Đây là kiến trúc của chúng tôi để triển khai trên các NPU. Hai điểm chính từ slide này có lẽ là: Thứ nhất, bên dưới, chúng tôi thực sự đầu tư rất nhiều công sức vào các thư viện tối ưu hóa. Chúng tôi có XNN, một thư viện tối ưu hóa CPU, và ML drift, các thư viện tối ưu hóa cho GPUs. Chúng tôi có các nhóm làm việc để đảm bảo cả hai đều có hiệu suất xuất sắc. Rất nhiều ứng dụng one-off của Google dựa vào cả hai thư viện này. Vì vậy, chúng tôi rất muốn đảm bảo chúng có hiệu suất thực sự tốt và hoạt động trên phạm vi thiết bị rộng nhất có thể. Và chúng sử dụng cái mà chúng tôi gọi là quy trình làm việc JIT (Just-In-Time), nơi chúng tôi tạo ra một sản phẩm duy nhất được gọi là tệp lighter TLM hoặc tệp lighter T có thể hoạt động trên CPU và GPU và được triển khai cho nhiều loại thiết bị. Đối với NPU, chúng tôi cần một cái gì đó chuyên biệt hơn một chút. Đối với NPU, chúng tôi cần gọi một vendor compiler plug-in (trình cắm bộ biên dịch của nhà cung cấp) trước, và điều đó sử dụng quy trình làm việc biên dịch trước (ahead of time compile workflow). Vì vậy, bạn cần tạo ra một sản phẩm cụ thể cho một NPU cụ thể. Và sau đó, trong thời gian chạy của chúng tôi, chúng tôi gọi một bộ điều phối (dispatch) đến một API cụ thể được phép điều phối công việc đến trình điều khiển thiết bị của NPU. Nhưng cả hai đều có sẵn thông qua một API nhất quán. Vì vậy, mặc dù đường dẫn JIT so với AOT ảnh hưởng đến quy trình làm việc xây dựng, quy trình làm việc phát triển ứng dụng thực tế rất giống nhau trên NPU, CPU hoặc GPU.
Xuất và Suy Luận Mô Hình, Hỗ Trợ Mô Hình Bên Thứ Ba
Việc xuất và suy luận (inference) thực sự đơn giản. Chúng tôi có lighter TT torch để chỉ xuất. Tôi biết tôi đã nói rất nhiều về các mô hình Gemma vì đây là "tuần lễ Gemma" đối với chúng tôi, vì vậy chúng tôi rất hào hứng với Gemma hiện tại. Điều đáng nói là chúng tôi cũng hỗ trợ các mô hình của bên thứ ba. Có một mô hình tham số Queen 6B mà bạn thấy ở đó, và những mô hình Queen đó cũng hoạt động trong ứng dụng, đó là những gì bạn sẽ thấy ở phía bên phải. Và ứng dụng cũng hỗ trợ việc tải bất kỳ tệp lighter TLM nào và chạy nó để nhận các số liệu điểm chuẩn, điều mà chúng tôi hy vọng sẽ thấy trong video trong giây lát.
Vì vậy, bạn có thể chạy nó, ví dụ, trên GPU và sau đó trên Pixel mới nhất mà bạn đang mô phỏng ở đây. Thật ra, đó là một câu hỏi hay. Thành thật mà nói, tôi không biết điều này. Chúng tôi thực hiện rất nhiều thử nghiệm trên Pixel và rất nhiều thử nghiệm trên S25 nữa. Vì vậy, tôi cho rằng đó là một trong hai thiết bị đó, nhưng tôi không biết chắc chắn. Và thực ra, chúng tôi đã không hiển thị nó ở đó vì gần đây, trong bản phát hành cuối cùng, chúng tôi đã thêm một biểu tượng tùy chọn bên dưới mỗi cuộc trò chuyện, và nếu bạn nhấp vào đó, nó sẽ hiển thị các số liệu giải mã được điền sẵn của mô hình. Vì vậy, nếu bạn muốn, bạn có thể tìm bất kỳ mô hình nào chúng tôi có trên Hugging Face và tải nó vào ứng dụng, sau đó chạy để xem các số liệu điểm chuẩn cho mô hình này trên một điện thoại cụ thể nếu bạn muốn. Vâng, bạn có thể, và cũng trong giao diện dòng lệnh (CLI), nếu bạn đang chạy trên máy tính để bàn, bạn cũng có thể chỉ cần sử dụng lighter TLM run nếu bạn muốn thực hiện một số thử nghiệm trên máy tính để bàn để hiểu cách các mô hình hoạt động trên máy tính để bàn.
Ví Dụ: Mô Hình VLM Nhỏ gọn (Fast VLM của Apple)
Đây là một ví dụ khác về mô hình của bên thứ ba, đây là Fast VLM, một mô hình của Apple. Nó thực sự là một mô hình VLM rất tốt chỉ với 500 triệu tham số. Và nó đang chạy với hardware acceleration trên Qualcomm, đó là lý do tại sao nó chạy rất nhanh. Và cái này đang chạy, vâng, cái này đang chạy trên một chiếc S25 tôi nghĩ, bởi vì đó là Qualcomm silicon, và chúng tôi chỉ đơn giản là để nó chạy trong một vòng lặp, nói rằng "mô tả cảnh, mô tả cảnh" với đầu vào video, và nó chạy, vâng, nó chạy rất rất nhanh.
Vì vậy, đây là một ví dụ điển hình về những gì có thể thực hiện được với một mô hình có thể triển khai trên thiết bị. Trong trường hợp này, chúng tôi chưa thực hiện lượng tử hóa 4-bit, nhưng tôi giả sử nếu chúng tôi đủ động lực, chúng tôi đã có thể làm điều đó và sau đó chúng tôi sẽ có một thứ chỉ yêu cầu thêm khoảng 250 hoặc 260 megabyte trong ứng dụng của bạn để mang lại trải nghiệm loại này. Vì vậy, vâng, chúng chắc chắn khả thi. Và đây là khi tôi nói về các mô hình như thế này, đây là một ví dụ về một mô hình 500 triệu tham số có mục đích chung. Nó đã được đào tạo trên một tập hợp khá hẹp các thứ, đó là mô tả cảnh hoặc chỉ hình ảnh thành mô tả. Vì vậy, đó là một trường hợp sử dụng khá hẹp nhưng vẫn có mục đích chung. Vì vậy, đây là một ví dụ điển hình về các mô hình siêu nhỏ lớn hơn, những mô hình nhỏ hơn mà chúng tôi có như GMA 3270M, ví dụ, những mô hình đó thường yêu cầu tinh chỉnh để thực hiện một tác vụ cụ thể. Nhưng, vâng, đây là một ví dụ điển hình, đây là lý do tại sao tôi đưa nó vào, nó là một ví dụ điển hình về một mô hình siêu nhỏ có mục đích chung rất hữu ích. Cũng đáng lưu ý rằng, tôi không nghĩ mình đã đưa vào bài nói chuyện các ví dụ khác về các mô hình siêu nhỏ có mục đích chung bao gồm rất nhiều mô hình phiên âm rất nhỏ, hoặc một số mô hình dịch thuật theo cặp hẹp hiện có, nhiều trong số đó chúng tôi hỗ trợ, nhiều trong số đó cũng có trên trang Hugging Face của chúng tôi nếu bạn muốn kiểm tra chúng.
Các Mô Hình Cụ Thể: Function Gemma, Mobile Actions, Tiny Gardens
Vâng, có rất nhiều thứ có sẵn trên Hugging Face. Vâng, slide tiếp theo chỉ hiển thị một vài mô hình mà tôi muốn nói đến. Function Gemma là một mô hình mà chúng tôi đã xuất bản hợp tác với GDM vào năm ngoái. Function Gemma là một mô hình có mục đích chung mà bạn có thể tinh chỉnh thêm cho function calling (gọi hàm), và có các sổ tay Colab ngoài kia nếu bạn muốn tìm hiểu về cách định dạng tập dữ liệu và cách tinh chỉnh Function Gemma cho function calling. Hai mô hình tiếp theo phía trên là Mobile Actions và Tiny Gardens. Mobile Actions là ví dụ mà tôi đã đề cập trước đó, có 10 hành động di động khác nhau mà chúng tôi đã tự tinh chỉnh, nơi chúng tôi đạt được tôi nghĩ là khoảng 86 hoặc 70% độ tin cậy. Tiny Garden là một ví dụ khác, đây là một trò chơi mà chúng tôi đã xây dựng trong ứng dụng gallery mà bạn cũng có thể chơi. Nó chỉ là một ví dụ khác về mô hình voice to function calling đã được tinh chỉnh mà bạn có thể sử dụng.
Fine-tuning Hướng Dẫn và Hậu Tố Mô Hình
Vâng, nó được tinh chỉnh theo hướng dẫn (instruction fine-tuned). Vì vậy, trong các mô hình, khi GDM xuất bản các mô hình, đôi khi chúng có hậu tố PT và đôi khi có hậu tố IT. PT là khi chúng tôi xuất bản một mô hình ngay sau quá trình pre-training (tiền đào tạo) trước khi fine-tuning (tinh chỉnh). Điều này hữu ích cho những người dùng chuyên gia vì bạn có thể tự thực hiện tất cả quá trình instruction fine-tuning của riêng mình. Bạn có thể kiểm soát hoàn toàn tính cách của mô hình và bạn không cố gắng bỏ đi một số tinh chỉnh mà chúng tôi đã thực hiện trong trường hợp này. Cách chúng tôi dạy mô hình cách thực hiện function calling thực sự là thông qua chính quá trình instruction fine-tuning. Vì vậy, khi chúng tôi xuất bản một mô hình để tinh chỉnh thêm cho function calling, nó đã có tính cách function calling, và đó thực sự là điều chúng tôi muốn xuất bản. Trong trường hợp này, mô hình này dành cho tinh chỉnh thêm nhưng nó là một mô hình IT.
Các Mô Hình Ngôn Ngữ Lớn Gemma và Ứng Dụng Nâng Cao
Thông thường, đối với các mô hình lớn hơn, như dòng Gemma 3, chúng tôi có cả checkpoint IT (instruction-tuned) và PT (pre-trained). Việc lựa chọn checkpoint nào phụ thuộc vào việc bạn có lượng dữ liệu lớn và muốn tự mình thực hiện fine-tuning toàn bộ hay không. Có một cuộc thảo luận riêng về các use cases AI có chủ quyền mà một số người từ DeepMind sẽ trình bày vào cuối tuần này. Tôi hình dung rằng các trường hợp đó sẽ bắt đầu với checkpoint đã được pre-train của chúng tôi, sau đó thêm một kho dữ liệu khổng lồ gồm dữ liệu có chủ quyền hoặc dữ liệu doanh nghiệp, và bạn có thể fine-tune hoàn toàn một mô hình 27 tỷ tham số để thực hiện công việc cụ thể.
Một ví dụ khác là embedding Gemma. Về mặt kỹ thuật, nó không phải là một Mô hình Ngôn ngữ Lớn (LLM), nhưng embedding Gemma là một mô hình text embedding mà chúng tôi đã phát hành cùng với nhóm Gemma vào tháng 9 năm ngoái. Mô hình này thực hiện text embedding cho các use cases kiểu RAG. Đây là một mô hình embedding rất mạnh mẽ chỉ với 300 triệu tham số. Đó là một ví dụ khác về một loại mô hình tiện ích cao, mặc dù không phải là một LLM về mặt kỹ thuật (ngay cả khi bên trong nó là một transformer), nhưng nó là một ví dụ về một mô hình nhỏ rất hữu ích cho các use cases on-device.
Chúng tôi đã đề cập đến việc AOT compilation (Ahead-of-Time compilation) là workflow của chúng tôi để tăng tốc phần cứng on-device, tốt nhất để phân phối các mô hình nhỏ đến nhiều nền tảng. Light TLM được xây dựng trên LightORT và hỗ trợ tất cả các loại mô hình này. Bạn cũng có thể tìm thấy các mô hình non-LLM trên Hugging Face. Điều này khá liên quan vì khi bạn xây dựng một ứng dụng phức tạp hơn, bạn thường cần một số thứ xung quanh LLM, chẳng hạn như mô hình voice activity detection hoặc denoising model. Rất nhiều mô hình này cũng có sẵn chỉ bằng cách sử dụng runtime LightORT. Light TLM là runtime có toàn bộ auto-regressive loop. Nó được xây dựng trên LightORT và có một bộ các mô hình LLM có sẵn để sử dụng với Light TLM. Tuy nhiên, cũng có rất nhiều mô hình hỗ trợ non-auto-regressive có sẵn để sử dụng với Light API rất phù hợp để triển khai một ứng dụng hoàn chỉnh.
Đối với người dùng cao cấp, bạn có thể tùy chỉnh hoàn toàn các mô hình. Nếu bạn muốn viết phiên bản llama, moonshine, fi hoặc quen của riêng mình, bạn có thể sử dụng codebase directory.
Ứng dụng Thực tế với Mô hình Nhỏ: AI Edge Eloquent
Chúng tôi có thể làm rất nhiều điều với các mô hình rất nhỏ. Các mô hình thuộc lớp 500M có sẵn cho một số tính năng tiêu chuẩn của các LLM nhỏ hơn. Chúng tôi đã đạt được nhiều thành công trong việc fine-tuning chúng cho các ứng dụng. Ví dụ tiếp theo tôi sẽ trình bày là một ứng dụng mà chúng tôi đã xây dựng bằng cách sử dụng các LLM nhỏ. Đây là một ứng dụng hiện chỉ có trên iOS có tên là AI Edge Eloquent.
AI Edge Eloquent là một loại mô hình transcription, nhưng thay vì chỉ đơn thuần chuyển đổi giọng nói thành văn bản, nó có một bước polish tự động riêng biệt để loại bỏ tất cả các từ xen, từ đệm ("ừm", "à"). Ví dụ, khi bạn nghe bản transcription của bài thuyết trình này, bạn sẽ thấy rất nhiều từ đệm. Eloquent được xây dựng cho loại user story transcription này, nơi nó thực hiện dictation nhưng sau đó có một bước polish tự động để loại bỏ tất cả các từ xen và từ đệm. Vì vậy, nếu bạn muốn đọc chính tả một tin nhắn để sử dụng sau này, nó có thể làm sạch các thành ngữ giao tiếp.
Một tính năng khác là danh sách biasing. Ví dụ, nếu chúng ta đang nói về LLM và bạn nói "Bạn đã huấn luyện một Laura cho cái này chưa?", bất kỳ dịch vụ transcription tiêu chuẩn nào cũng sẽ dịch "Laura" thành tên "Lau" hoặc "A". Trong khi đó, bạn có thể cung cấp cho nó một danh sách các từ khóa hoặc thuật ngữ kỹ thuật, và sau đó mô hình sẽ "bias" theo những từ đó vì đó là cách con người thực sự viết.
Các tính năng chính ở đây là:
a) Nó chạy hoàn toàn offline.
b) Nó có từ điển biasing riêng (nếu bạn muốn gọi nó như vậy).
c) Nó làm sạch văn bản, như bạn thấy ở giữa có bước polished.
Nhìn chung, điều này mang lại một trải nghiệm offline khá gọn gàng, không tốn chi phí, vì có một số dịch vụ trả phí cung cấp tính năng này. Nhưng ứng dụng này có thể cung cấp cho bạn văn bản đã được làm sạch thực sự rõ ràng.
[Người hỏi]: Liệu bước cuối cùng đó có được thực hiện bằng cách thay đổi các mã thông báo đặc biệt trong mô hình hay được thực hiện bằng cách phủ lên một bản đồ nào đó?
[Người trình bày]: Đó là bước cuối cùng, đúng vậy. Tôi sẽ trả lời câu hỏi của bạn trong hai slide nữa, nhưng đây là một câu hỏi hay. Câu hỏi cho bản ghi là liệu việc làm sạch có được thực hiện bên trong mô hình chính hay bên ngoài, và cách áp dụng biasing. Chúng ta sẽ trả lời điều đó trong hai slide nữa.
Kiến trúc Xử lý Văn bản và Cá nhân hóa
Đúng vậy, đây là phần personalization. Bạn có thể thêm các thứ như "Laura" là ví dụ chúng tôi luôn sử dụng vì nó khá gần gũi với chúng tôi. Nó cho phép bạn, nếu muốn kết nối với tài khoản Google của mình, nhập dữ liệu từ Gmail hoặc thứ gì đó và tìm các từ bất thường, sau đó thêm chúng vào danh sách biasing hoặc bạn có thể tự thêm chúng vào. Những thứ mà mọi người thường đưa vào đây là tên riêng, bởi vì các mô hình thường mắc lỗi với những tên không phổ biến, cũng như các thuật ngữ kỹ thuật. Ví dụ như Gianning và Surreal là hai người trong nhóm đã phát triển ứng dụng này. Vì vậy, không có gì ngạc nhiên khi đây là ví dụ chúng tôi có.
Đây là nơi chúng tôi gọi là text polishing engine (công cụ làm sạch văn bản). Chúng tôi có hai bước ở đây. Điều quan trọng cần lưu ý là cả hai bước này: đầu tiên, tôi sẽ mô tả, sau đó tôi sẽ nói về các mô hình.
Đầu vào micro đi vào một speech recognition engine (công cụ nhận dạng giọng nói) để cho ra bản transcription chưa được lọc. Sau đó, ở nửa dưới, chúng ta có personalization flow (luồng cá nhân hóa) nơi bạn nhận được một tập hợp các từ không phổ biến hoặc độc đáo, sau đó đi vào các thuật ngữ liên quan. Cả hai đều đi vào một text polishing engine, đây là một mini LLM chuyên dụng chỉ dành cho việc làm sạch văn bản.
Chúng ta có thể đã xây dựng một LLM duy nhất để làm tất cả điều này, nhưng thực tế của phát triển mobile đôi khi là với các mô hình nhỏ cũng có câu chuyện về tính mô-đun. Vì vậy, cùng một engine transcription trong ứng dụng của bạn, bạn có thể có một use case khác cho nó và bạn có thể không muốn trả chi phí trọng số (weights) của chúng bằng cách sử dụng chúng ở nhiều nơi. Đây là một pattern chúng tôi thấy đang nổi lên khi chúng tôi xây dựng nhiều ứng dụng thuộc loại này: playbook về tính mô-đun. Vì vậy, về lý thuyết, hai mô hình đó có thể được kết hợp lại. Trong thực tế, việc có các mô hình riêng biệt là một lựa chọn thực dụng hơn.
[Người hỏi]: Điều này cũng có chiều sâu hơn.
[Người trình bày]: Đúng vậy. Và bạn cũng có thể kiểm tra những gì đang xảy ra ở giữa, dễ gỡ lỗi hơn. Chúng tôi cũng thấy điều tương tự một chút với voice-to-function calling, nhưng đó là một câu chuyện khác cho một ngày khác.
Phát triển Mô hình Dẫn xuất từ Gemma
Một điều khác cần chỉ ra là ASR engine (công cụ nhận dạng giọng nói tự động) và text generation có logo Gemma ở góc. Đây không phải là các mô hình Gemma được phát hành chính thức, nhưng chúng tôi đã thực hiện cùng một workflow mà chúng tôi đang khuyên những người khác làm. Chúng tôi đã lấy các mô hình Gemma, mô hình Gemma nhỏ hơn (đây sẽ là một derivative từ dòng Gemma 3270M), và về cơ bản đã fine-tune mô hình đó để có một transcription engine và sau đó là một text polishing engine. Chúng tôi đã fine-tune chúng.
Workflow đó thường trông như thế nào, để bạn hiểu rõ hơn, là chúng tôi sẽ sử dụng một workflow trong đó một Mô hình Ngôn ngữ Lớn (LLM) mạnh hơn nhiều trên đám mây để tạo ra rất nhiều dữ liệu tổng hợp (synthetic data) tương ứng với loại nội dung chúng tôi muốn. Sau đó, khi bạn có vài triệu hoặc hàng chục triệu (dữ liệu tổng hợp) tùy thuộc vào mức độ tham vọng của bạn, bạn đưa nó vào một workflow fine-tuning và fine-tune mô hình nhỏ cơ sở mà bạn đang làm việc để có được một mô hình dẫn xuất. Workflow tương tự mà chúng tôi đang trình bày ở đây, chúng tôi đã sử dụng nội bộ để phát hành một ứng dụng ghi chú mạnh mẽ hơn. Nhưng workflow tương tự này là lý do tôi trình bày nó ở đây như một ví dụ thực tế về cách chúng tôi đang sử dụng các mô hình nhỏ dẫn xuất từ Gemma để xây dựng các ứng dụng sản xuất mới. Chúng tôi cũng đang sử dụng flow này cho nhiều use cases khác nội bộ, hỗ trợ các sản phẩm Google 1p và nhiều cách khác mà những sản phẩm đó có thể sẽ tự nói về mình theo thời gian. Nhưng các mô hình Gemma nhỏ hơn thực sự rất mạnh mẽ cho loại use case này, và chúng tôi đang thấy hiệu quả tốt từ nó.
[Người hỏi]: Tôi sẽ kết hợp nó với bàn phím vì điều này rất hữu ích.
[Người trình bày]: Đúng vậy, đó là những gì text polishing engine thực hiện. Là một phần của đó, chúng tôi... texting engine đã được huấn luyện, tôi đoán là được instruction fine-tuned, để có một lời nhắc hệ thống kiểu như: "Này, đây là những từ đặc biệt của bạn. Vui lòng sửa bất cứ điều gì nghe giống những từ này thành những từ này." Và sau đó cũng loại bỏ các từ xen hoặc sự thiếu rõ ràng hoặc thậm chí những thứ như "Tôi quên nói điều này" hoặc "bỏ qua điều đó."
[Người hỏi]: Có lẽ là một kỹ năng.
[Người trình bày]: Đúng vậy. Không, trong trường hợp này, nó không phải là một skill vì đây là một mô hình nhỏ. Chúng tôi thực sự chỉ huấn luyện hành vi đó vào mô hình. Đúng là với mô hình 4 tỷ tham số có thể có một phiên bản của điều này bạn có thể làm như một skill, đó thực sự sẽ là một dự án phụ thú vị. Nhưng đối với các mô hình nhỏ, playbook chúng tôi thường thấy thực sự hữu ích là tạo dữ liệu tổng hợp với một mô hình lớn hơn, sau đó chọn một mô hình có sẵn như Gemma 327M hoặc tương tự và chạy với fine-tuning. Sau đó, kết hợp với quantization, bạn có thể phát hành một tính năng hẹp khá hấp dẫn cho một tập hợp người dùng rất rộng, được hỗ trợ bởi một LLM hoạt động trên nhiều thiết bị.
[Người hỏi]: Bạn có GitHub repo nào đó, một workflow về cách fine-tune nó không? Bởi vì không chỉ là fine-tuning, mà còn là warm-up quá trình huấn luyện và sau đó bắt đầu...
[Người trình bày]: Đúng vậy, chúng tôi có. Với ấn phẩm Gemma 3270M, chúng tôi có một Colab notebook. Với Gemma 327M và Function Gemma, cả hai khi chúng tôi phát hành các mô hình đó đều có Colab notebooks hướng dẫn cách thực hiện fine-tuning hoàn chỉnh.
Kinh nghiệm Fine-tuning và Hiệu suất
[Người trình bày]: Đúng vậy.
[Người hỏi]: Về fine-tuning, kinh nghiệm của bạn là gì? Lấy ví dụ về function calling.
[Người trình bày]: Đúng vậy.
[Người hỏi]: Và bạn nói rằng bạn có 80% cơ hội khớp với 10 chức năng.
[Người trình bày]: Chúng tôi đã hoàn thành điều đó.
[Người hỏi]: Đó có lẽ là sau fine-tuning?
[Người trình bày]: Đúng vậy.
[Người hỏi]: Và bạn có thể cho biết một số con số trước đó là bao nhiêu không?
[Người trình bày]: Ồ, wow. Chúng ta đang nói về...? Ồ, wow.
Hiệu suất Mô hình và Fine-tuning
Chúng tôi thấy sự cải thiện từ khoảng 40% lên 86% trong các tác vụ. Trong giới hạn 86% đó, chúng tôi không muốn... Ồ, chúng tôi có 10 hàm và có thể hai trong số đó đã kéo mức trung bình của chúng tôi xuống rất nhiều. Có khoảng tám hàm đơn giản có độ tin cậy trên 90%, chẳng hạn 93%. Vì vậy, với các hàm rất đơn giản, chúng tôi có độ tin cậy thực sự rất cao. Tôi quên mất các chi tiết cụ thể, nhưng có hai hàm đã kéo mức trung bình xuống khoảng 86%, đó là kết quả cuối cùng của chúng tôi. Cũng có một bài đăng trên blog mà bạn có thể đọc để biết thêm chi tiết.
Chúng tôi thường xuyên thấy điều này với các mô hình nhỏ hơn. Kinh nghiệm của chúng tôi là trên một eVals nhất định, việc fine-tuning mang lại từ 20 đến 40 điểm. Vì vậy, đó là một chiến thắng thực sự đáng kể cho các mô hình nhỏ, đặc biệt là khi chúng ta nói về mô hình 200 triệu tham số hoặc 270 triệu tham số mà chúng tôi đã công bố. Fine-tuning là điều cần thiết cho hầu hết các tác vụ, trừ khi bạn có một mô hình đã được công bố để thực hiện một tác vụ cụ thể, như các mô hình chuyển đổi giọng nói thành văn bản hoạt động rất tốt ở một tác vụ và không yêu cầu fine-tuning thêm, bởi vì chúng đã được định hướng để làm việc đó ngay từ đầu. Nhưng nếu bạn muốn thực hiện một tác vụ cụ thể của riêng mình và triển khai nó trên nhiều thiết bị, thì fine-tuning, ít nhất là hiện tại, là quy trình làm việc được lựa chọn. Điều này có thể thay đổi trong tương lai.
Hỗ trợ Colab và Fine-tuning cho Gemma
Người hỏi: Chúng tôi có một colab có thể sử dụng web không?
Người trả lời: Đó là một câu hỏi hay. Chúng tôi có một colab để có được tệp LIDAR hoặc TLM. Hỗ trợ của chúng tôi cho LIDAR hoặc TLM trên web đang trong quá trình phát triển. Vâng, tôi chỉ có thể nói rằng xin hãy xem trang GitHub của chúng tôi để biết trạng thái mới nhất.
Người hỏi: Vậy chúng tôi có thể nhận được hướng dẫn fine-tuning cho Gemma 4 không?
Người trả lời: Gemma 4 đã công bố các mô hình nhỏ và trung bình vào tuần trước. Trong quá khứ, đối với Gemma 3, chúng tôi cũng đã công bố các mô hình siêu nhỏ. Nhưng đây là những mô hình đầu tiên chúng tôi phát hành cho Gemma 4 vào tuần trước. Sẽ có thêm các mô hình Gemma trong tương lai, tôi đoán vậy. Đã có một số fine-tuning có sẵn cho các mô hình lớn hơn. Nhưng đối với các mô hình siêu nhỏ mà chúng tôi đã công bố cho đến thời điểm hiện tại, nếu ai đó đang đọc hoặc nghe bài nói chuyện này trong vài tháng tới, hãy tìm kiếm thông tin mới nhất trên web. Nhưng hiện tại, các mô hình siêu nhỏ mà chúng tôi đã công bố là mô hình Gemma 3 siêu nhỏ. Và đối với hàm Gemma và Gemma 327M, có các quy trình làm việc fine-tuning có sẵn. Đối với Gemma 4, được công bố vào tuần trước, có một số quy trình làm việc, có các công thức fine-tuning trong Vertex AI và những nơi khác, tôi tin là vậy. Nhưng hãy xem các bài nói chuyện khác về Gemma vào cuối tuần này để biết thêm chi tiết.
Triển khai Mô hình Nhỏ trên Thiết bị Di động và Hệ thống Nhúng
Người nói: Ồ, vâng, ứng dụng Eloquent thực sự có sẵn trên iOS nếu ai đó muốn thử.
Người khác: Nhưng không ở Châu Âu.
Người nói: Vâng, tôi không thể...
Người khác: Ồ, vậy bạn có thể tìm thấy nó trên trình duyệt web, nhưng không có trên cửa hàng ứng dụng.
Người nói: Chà. Vậy điều đó cần được bật lên, tôi đoán vậy. Đó là một phản hồi rất hữu ích, tôi sẽ chuyển tiếp nó.
Để kết luận, những điểm chính cần rút ra là các mô hình GenAI kích thước trung bình hoặc nhỏ, theo cách nói của chúng tôi, sẽ xuất hiện trên các thiết bị di động gần bạn. Các mô hình tương tự này cũng rất tuyệt vời để sử dụng trong hệ thống nhúng, các nền tảng nhúng. Ít nhất là hiện tại, với dung lượng bộ nhớ mà chúng ta có trên điện thoại di động (không có vẻ sẽ tăng lên sớm do chi phí), các mô hình siêu nhỏ là lựa chọn hàng đầu để triển khai rộng rãi. Chúng tôi hy vọng sẽ làm cho việc này dễ dàng hơn và dễ dàng hơn, và mong muốn có những mô hình mạnh mẽ hơn nữa thông qua quan hệ đối tác với JDM. Chúng tôi cũng muốn làm cho các quy trình làm việc fine-tuning trở nên dễ dàng nhất có thể để làm cho chúng dễ tiếp cận hơn. Vâng, tôi rất vui được chia sẻ những gì chúng tôi đang làm trên cả hai mặt trận này. Chúng ta còn chín phút, nếu ai có câu hỏi nào khác, tôi rất sẵn lòng trả lời.
An toàn cho Mô hình Edge và GenAI Hệ thống
Người hỏi: Các câu hỏi về an toàn trên các mô hình edge.
Người trả lời: Trước hết, nhóm Gemma đã dành rất nhiều thời gian cho vấn đề này và tôi sẽ chuyển bạn đến họ để hỏi tất cả các câu hỏi về an toàn cho các mô hình đã được công bố tuần trước. Nhưng họ thực sự rất quan tâm đến điều này; họ đã dành rất nhiều thời gian cho an toàn của các mô hình đó.
Ngoài ra, đối với GenAI hệ thống trong AI Core chẳng hạn, những gì thực sự được triển khai ở đó – và bạn có thể sẽ nghe nhiều hơn về điều này từ những người khác – là trong GenAI hệ thống khi nó thực sự được triển khai như một phần của hệ điều hành, chứ không phải là một mô hình thô mà chúng tôi đã công bố tuần trước, nhà cung cấp hệ thống thường sẽ có một bộ kiểm tra an toàn đầu vào và đầu ra cho mô hình. Đó là một bổ sung hậu mãi vì có những điều cụ thể mà họ muốn và không muốn cho sản phẩm của họ. Vì vậy, đó là một lớp an toàn khác.
Đối với các mô hình nhỏ hơn và đặc biệt là các mô hình siêu nhỏ, an toàn thực sự quan trọng. Nhưng nhìn chung, cách chúng tôi triển khai các mô hình siêu nhỏ là trong một API hoặc tác vụ rất cụ thể. Bạn có thể hình dung với Eloquent, ứng dụng bạn đã thấy, hồ sơ rủi ro ở đó giống như một ứng dụng tái tạo (regenerative app) hơn là một ứng dụng tạo sinh (generative app), nếu bạn hiểu ý tôi. Nó sẽ không tạo ra mọi thứ hoàn toàn ngẫu nhiên. Vì vậy, bạn có thể xem xét phạm vi mà mô hình đang cố gắng thực hiện, API surface và functional surface. Thông thường, để một mô hình siêu nhỏ hoạt động, nó thường có phạm vi chức năng hẹp hơn, điều này cho phép bạn vẫn cần đảm bảo an toàn, nhưng đó là một vấn đề hẹp hơn mà bạn cần giải quyết khi xem xét nó. Đó là điều tôi muốn nói.
Triển khai Mô hình Gemma trên GPU Nvidia
Người hỏi: Có cách nào để tôi tìm hiểu cách triển khai các mô hình Gemma nhỏ hơn một chút hoặc lớn hơn một chút trên 5090 không? Vì tôi có 5090 và muốn triển khai nó để thử nghiệm. Có cách nào để tôi tìm kiếm thông tin không?
Người trả lời: Ồ, về 5090, tôi tin rằng chúng tôi không có tài liệu cụ thể cho việc đó, nhưng công cụ của chúng tôi có hỗ trợ GPU Nvidia. Nvidia cũng là đối tác của Gemma. Họ đã hỗ trợ một số lần ra mắt Gemma trong quá khứ, vì vậy có thể bạn sẽ thấy một số thông tin đó trên trang web của Nvidia thông qua Tensor TLM của họ. Tôi biết họ đã hỗ trợ một số lần ra mắt Gemma trong quá khứ, nhưng tôi không thể chỉ cho bạn tài liệu cụ thể ngay lập tức, nhưng đó là hai nơi tôi sẽ kiểm tra.
Hỗ trợ Kỹ năng Tác nhân và Multi-skill Execution
Người hỏi: Các ví dụ bạn trình bày về kỹ năng tác nhân rõ ràng là việc thực hiện một kỹ năng duy nhất. Bạn chạy kỹ năng đó, đó là một kỹ năng đơn lẻ. Liệu bạn có thay đổi kiến trúc cho multi-skill không?
Người trả lời: Đó là một câu hỏi. Chúng tôi thực sự có hỗ trợ multi-skill execution. Đây là điều mà trong ứng dụng, nếu bạn tải ứng dụng xuống, bạn có thể định nghĩa các kỹ năng bạn muốn tải. Và bạn có thể bật hoặc tắt chúng một cách dễ dàng. Sau đó, bạn có thể dễ dàng nói rằng nếu bạn rất cụ thể trong lời nhắc của mình, chẳng hạn như "tìm kiếm chủ đề này trên Wikipedia, tóm tắt thành ba gạch đầu dòng và sau đó hiển thị dưới dạng thẻ ghi nhớ." Nếu bạn thực sự cụ thể, điều đó sẽ hoạt động. Thành thật mà nói, chúng tôi chỉ mới có mô hình này vài tuần, vì vậy chúng tôi vẫn đang thử nghiệm các mô hình và xem xét giới hạn về mức độ chúng tôi có thể thực hiện skill stacking và skill chaining. Vâng, chúng tôi thực sự vẫn đang trong giai đoạn thử nghiệm. Hầu hết các ví dụ chúng tôi công bố là kỹ năng đơn lẻ, nhưng ngay cả trong ứng dụng phân tích nhật ký (diorization app), nếu bạn nhớ, Alice – người thực hiện điều đó – đã yêu cầu tóm tắt tâm trạng của cô ấy hoặc thời gian cô ấy gặp Amy, và sau đó Wikipedia sẽ xuất hiện và hỏi về bla bla bla. Vì vậy, trong ví dụ đó, cô ấy đã có thể thể hiện trong một cuộc trò chuyện duy nhất các lượt tương tác riêng lẻ bằng cách sử dụng các kỹ năng riêng lẻ. Vâng, nhưng việc skill stacking trong một lời nhắc riêng lẻ, tôi tin rằng chúng tôi đã thấy nó hoạt động khi bạn khá rõ ràng, nhưng chúng tôi cũng vẫn đang học hỏi những giới hạn về khả năng của các lớp mô hình này.
Fine-tuning và Kỹ năng Tác nhân
Người hỏi: Một câu hỏi tiếp theo. Vậy, quyết định xác định kỹ năng nào quan trọng cho vấn đề và vì đây là một mô hình nhỏ. Bạn có thực hiện instruction tuning từ một mô hình lớn hơn để xây dựng trí thông minh đó không, hay nó thực sự giỏi ở việc này?
Người trả lời: Mô hình đã được điều chỉnh để thực sự giỏi trong các quy trình làm việc của tác nhân (agentic workflows) và function calling. Nó không được huấn luyện cụ thể cho skill pattern của chúng tôi. Điều đó chỉ đến sau này, khi chúng tôi có mô hình và bắt đầu thử nghiệm, chúng tôi nhận thấy nó hoạt động và tự hỏi liệu chúng tôi có thể làm điều này không. Vì vậy, đó là một quy trình làm việc kiểu như vậy. Không có huấn luyện cụ thể cho skill structure của chúng tôi. Nhưng nhóm đã dành rất nhiều thời gian để thực hiện tư duy đa năng và function calling. Nhóm GDM đã thực hiện rất nhiều công việc tuyệt vời để cung cấp cho chúng tôi một mô hình đa năng thực sự mạnh mẽ, nhưng không có gì đặc biệt cho ứng dụng của chúng tôi. Vì vậy, nếu bạn có một cách tiếp cận kỹ năng hơi khác một chút, và có thể có một kiến trúc kỹ năng tốt hơn so với những gì chúng tôi đã trình bày hôm nay, điều đó hoàn toàn có thể. Vâng, bạn có thể mong đợi khá thành công. Không có "bí quyết bí mật" nào trong những gì chúng tôi đã trình bày.
Cửa sổ ngữ cảnh và Tối ưu hóa bộ nhớ
Người hỏi: Thử thách lớn đầu tiên là ngữ cảnh. Đặc biệt là khi bạn bắt đầu làm việc với tác nhân, bạn có thể nói một chút về cửa sổ ngữ cảnh trên E2B không?
Người trả lời: Được. Vâng, tôi sẽ chuyển câu hỏi này cho nhóm Gemma để có hướng dẫn chính thức. Các mô hình kích thước trung bình có cửa sổ ngữ cảnh là 128K, và đối với các mô hình nhỏ hơn, tôi thực sự cần kiểm tra lại.
Người khác: 32K.
Người trả lời: 32K. Vâng, tôi cũng tự hỏi liệu nó có phải là 32K không. Vì vậy, việc triển khai của chúng tôi trong thư viện mặc định là khoảng 8K hoặc 12K vì lý do hiệu suất, nhưng các mô hình E2B và 4B hỗ trợ lên tới 32K, và các mô hình khác hỗ trợ lên tới 128K.
Người hỏi: Với 32K, bạn sẽ sử dụng rất nhiều bộ nhớ.
Người trả lời: Chà, tôi tự hỏi liệu chúng tôi có số liệu thống kê về điều đó trong model card không. Đối với mô hình E2B và E4B, dung lượng bộ nhớ cần thiết cho ngữ cảnh lớn hơn không tệ như bạn nghĩ. Đã có rất nhiều tối ưu hóa, nhóm đã tối ưu hóa số liệu đó cho các mô hình này vì chúng được nhắm mục tiêu cho các trường hợp sử dụng edge. Vì vậy, lượng KV cache cần thiết cho mỗi mã thông báo đầu vào đã được tối ưu hóa. Các mô hình hoạt động khá tốt trên khía cạnh đó. Tôi không có một con số cụ thể về số byte trên mỗi mã thông báo đầu vào ngay lúc này để cung cấp cho bạn, nhưng tôi có thể nói rằng nó rất tốt cho model class của nó.
Ứng dụng AI Edge Gallery trên iOS và Android
Người hỏi: Và câu hỏi thứ hai, bạn có phiên bản iOS không?
Người trả lời: Vâng, AI Edge Gallery hoạt động trên cả iOS và Android và là mã nguồn mở.
Kế hoạch Phát triển Ứng dụng MacOS
Phiên bản Mac OS là một điểm hay. Tôi sẽ đưa nó vào danh mục "sắp ra mắt". Chắc chắn đó là một trong những mục trong danh sách việc cần làm của chúng tôi, bởi vì chúng tôi chỉ mới xuất bản ứng dụng iOS lần đầu vào tháng Giêng. Trong khi đó, ứng dụng Android đã có sẵn từ mùa hè năm ngoái. Nhưng chúng tôi thực sự mong muốn mang lại trải nghiệm "những gì bạn thấy là những gì bạn nhận được" (what you see is what you get) cho các nhà phát triển. Để họ có thể sử dụng ứng dụng, vui chơi, thử nghiệm với các mô hình, sau đó lấy mã nguồn (source code), xem cách nó được xây dựng, v.v. Vâng, đó chắc chắn là ý định của chúng tôi.
Tối ưu hóa Mô hình: Tinh chỉnh so với Kỹ năng và Lời nhắc
Có sự đánh đổi nào giữa việc tinh chỉnh các mô hình riêng lẻ cho một tác vụ cụ thể và lượng bộ nhớ thực tế mà chúng tiêu thụ trên các thiết bị không? Giống như bạn đang xâu chuỗi các mô hình lại với nhau.
(Người hỏi): Tôi vừa tải mô hình E2B.
(Trả lời): Vâng. Nếu bạn có nhiều mô hình (có thể là vậy), thì đối với mô hình E2B, chúng tôi sẽ khuyến nghị tùy chỉnh thông qua kỹ năng (skills) hoặc tạo lời nhắc (prompting), chứ không phải thông qua tinh chỉnh (fine-tuning).
LORA Tinh chỉnh cho Hệ thống Nhúng và IoT
Đối với các mô hình nhỏ hơn đã được xuất bản, chúng tôi khuyến nghị tùy chỉnh thông qua kỹ năng và tạo lời nhắc. Đối với các mô hình cực nhỏ, chúng tôi sẽ khuyến nghị tùy chỉnh thông qua tinh chỉnh nếu bạn đang triển khai một mô hình nhỏ hơn. Một con đường khác dành cho các mô hình vừa và nhỏ là tinh chỉnh LoRA (Laura fine-tuning). Tôi biết Apple hỗ trợ điều này trong framework mô hình nền tảng của họ. Bạn có thể hỏi diễn giả về AI core xem liệu điều này có nằm trong lộ trình (roadmap) của họ không. Có một diễn giả về AI core sẽ có buổi hỏi đáp (AMA) sắp tới, bạn có thể kiểm tra với anh ấy về lộ trình của họ cho vấn đề này.
Nhưng chắc chắn, nếu bạn đang triển khai nó trên một hệ thống nhúng (embedded system), ví dụ như nếu ai đó hỏi tôi về việc triển khai mô hình 2B trên một nền tảng robot (robotics platform), tôi sẽ nói rằng bạn hoàn toàn nên tinh chỉnh các LoRA cho từng công việc, từng tác vụ của bạn. Môi trường chạy (runtime) của chúng tôi hỗ trợ tải (loading) mô hình và hoán đổi nóng (hot swapping) các LoRA, vì vậy bạn thậm chí không cần phải tải và gỡ tải (unload) mô hình để tải và gỡ tải các bộ điều hợp LoRA (Laura adapters). Nó được xây dựng cho trường hợp sử dụng cụ thể đó, ví dụ như robotics hoặc các nền tảng IoT. Và những LoRA đó có thể nhỏ hơn nhiều, tùy thuộc vào kiến trúc bạn chọn. Kích thước của chúng có thể từ 16 đến 100 megabyte, hoặc thậm chí nhỏ hơn, khoảng 8 đến 100 megabyte, tùy thuộc vào kiến trúc bạn sử dụng.