Swift Transformers đạt phiên bản 1.0 — và hướng tới tương lai

  • 7 min read
Swift Transformers đạt phiên bản 1.0 — và hướng tới tương lai

Swift Transformers Đạt Phiên Bản 1.0 – Và Hướng Tới Tương Lai

Chúng tôi đã phát hành swift-transformers hai năm trước (!) với mục tiêu hỗ trợ các nhà phát triển Apple và giúp họ tích hợp LLM cục bộ vào ứng dụng của họ. Rất nhiều thứ đã thay đổi kể từ đó (MLX và chat templates chưa tồn tại!), và chúng tôi đã biết cách cộng đồng thực sự sử dụng thư viện này.

Chúng tôi muốn tập trung vào các trường hợp sử dụng mang lại nhiều lợi ích nhất cho cộng đồng và đặt nền móng cho tương lai. Cảnh báo спойлер: sau bản phát hành này, chúng tôi sẽ tập trung nhiều vào MLX và các trường hợp sử dụng đại diện 🚀

swift-transformers là gì?

swift-transformers là một thư viện Swift nhằm giảm bớt khó khăn cho các nhà phát triển muốn làm việc với các mô hình cục bộ trên nền tảng Apple Silicon, bao gồm cả iPhone. Nó bao gồm các phần còn thiếu mà Core ML hoặc MLX không cung cấp, nhưng cần thiết để làm việc với suy luận cục bộ. Cụ thể, nó cung cấp các thành phần sau:

  • Tokenizers. Chuẩn bị đầu vào cho mô hình ngôn ngữ phức tạp đáng ngạc nhiên. Chúng tôi đã xây dựng rất nhiều kinh nghiệm với các thư viện tokenizers Python và Rust của chúng tôi, vốn là nền tảng cho hệ sinh thái AI. Chúng tôi muốn mang đến trải nghiệm hiệu quả, tiện dụng tương tự cho Swift. Phiên bản Swift của Tokenizers sẽ xử lý mọi thứ cho bạn, bao gồm cả chat templates và sử dụng đại diện!
  • Hub. Đây là một giao diện cho Hugging Face Hub, nơi tất cả các mô hình mở đều có sẵn. Nó cho phép bạn tải xuống các mô hình từ Hub và lưu trữ chúng cục bộ, đồng thời hỗ trợ tải xuống có thể tiếp tục trong nền, cập nhật mô hình, chế độ ngoại tuyến. Nó chứa một tập hợp con các chức năng được cung cấp bởi các thư viện PythonJavaScript, tập trung vào các tác vụ mà các nhà phát triển Apple cần nhất (ví dụ: tải lên không được hỗ trợ).
  • ModelsGeneration. Đây là các trình bao bọc cho LLM được chuyển đổi sang định dạng Core ML. Chuyển đổi chúng nằm ngoài phạm vi của thư viện (nhưng chúng tôi có một số hướng dẫn). Sau khi chúng được chuyển đổi, các mô-đun này giúp bạn dễ dàng chạy suy luận với chúng.

Cộng đồng đang sử dụng nó như thế nào?

Hầu hết thời gian mọi người sử dụng các mô-đun Tokenizers hoặc Hub, và thường xuyên cả hai. Một số dự án đáng chú ý dựa vào swift-transformers bao gồm:

  • mlx-swift-examples, bởi Apple. Trên thực tế, nó không chỉ là một tập hợp các ví dụ, mà là một danh sách các thư viện bạn có thể sử dụng để chạy các loại mô hình khác nhau bằng MLX, bao gồm LLM và VLM (mô hình ngôn ngữ hình ảnh). Nó giống như các thư viện ModelsGeneration của chúng tôi nhưng dành cho MLX thay vì Core ML – và nó hỗ trợ nhiều loại mô hình hơn như embedders hoặc Stable Diffusion.
  • WhisperKit, bởi argmax. Open Source ASR (nhận dạng giọng nói) framework, siêu tối ưu hóa cho Apple Silicon. Nó dựa trên các mô-đun HubTokenizers của chúng tôi.
  • FastVLM, bởi Apple, và nhiều bản demo ứng dụng khác, chẳng hạn như ứng dụng gốc SmolVLM2 của riêng chúng tôi.

Những thay đổi với phiên bản 1.0

Phiên bản 1.0 báo hiệu sự ổn định trong gói. Các nhà phát triển đang xây dựng ứng dụng trên swift-transformers và bản phát hành lớn đầu tiên này ghi nhận các trường hợp sử dụng đó và đưa số phiên bản phù hợp với thực tế đó. Nó cũng cung cấp nền tảng để lặp lại với cộng đồng để xây dựng bộ tính năng tiếp theo. Đây là một số bản cập nhật ưa thích của chúng tôi:

  • TokenizersHub hiện là các mô-đun cấp cao nhất, công dân hạng nhất. Trước phiên bản 1.0, bạn phải phụ thuộc và nhập toàn bộ gói, trong khi bây giờ bạn chỉ có thể chọn Tokenizers, chẳng hạn.
  • Nói về Jinja, chúng tôi vô cùng tự hào thông báo rằng chúng tôi đã hợp tác với John Mai (X) để tạo ra phiên bản tiếp theo của thư viện Swift Jinja tuyệt vời của anh ấy. Công việc của John rất quan trọng đối với cộng đồng: anh ấy một mình đảm nhận nhiệm vụ cung cấp một thư viện chat template vững chắc có thể phát triển khi các template ngày càng trở nên phức tạp hơn. Phiên bản mới nhanh hơn vài bậc độ lớn (không đùa đâu) và sống ở đây dưới dạng swift-jinja.
  • Để giảm thêm gánh nặng cho người dùng cuối, chúng tôi đã xóa các mục tiêu CLI ví dụ của mình và phần phụ thuộc swift-argument-parser, do đó ngăn ngừa xung đột phiên bản cho các dự án đã sử dụng nó.
  • Nhờ đóng góp của Apple, chúng tôi đã áp dụng API Core ML hiện đại với hỗ trợ cho các mô hình stateful (để dễ dàng KV-caching) và các API MLTensor biểu cảm – điều này loại bỏ hàng nghìn dòng mã tensor tùy chỉnh và mã toán học.
  • Rất nhiều mã vụn bổ sung đã bị xóa và diện tích API đã được giảm bớt để giảm tải nhận thức và lặp lại nhanh hơn.
  • Các thử nghiệm tốt hơn, nhanh hơn, mạnh mẽ hơn.
  • Các nhận xét tài liệu đã được thêm vào API công khai.
  • Swift 6 được hỗ trợ đầy đủ.

Phiên bản 1.0 đi kèm với các thay đổi API đột phá. Tuy nhiên, chúng tôi không mong đợi các vấn đề lớn nếu bạn là người dùng Tokenizers hoặc Hub. Nếu bạn sử dụng các thành phần Core ML của thư viện, vui lòng liên hệ để chúng tôi có thể hỗ trợ bạn trong quá trình chuyển đổi. Chúng tôi sẽ chuẩn bị hướng dẫn di chuyển và thêm nó vào tài liệu.

Ví dụ sử dụng

Đây là cách sử dụng Tokenizers để định dạng đầu vào gọi công cụ cho LLM:

swift import Tokenizers

let tokenizer = try await AutoTokenizer.from(pretrained: “mlx-community/Qwen2.5-7B-Instruct-4bit”)

let weatherTool = [ “type”: “function”, “function”: [ “name”: “get_current_weather”, “description”: “Get the current weather in a given location”, “parameters”: [ “type”: “object”, “properties”: [“location”: [“type”: “string”, “description”: “City and state”]], “required”: [“location”] ] ] ]

let tokens = try tokenizer.applyChatTemplate( messages: [[“role”: “user”, “content”: “What’s the weather in Paris?”]], tools: [weatherTool] )

Để biết thêm ví dụ, vui lòng xem phần này trong READMEthư mục Ví dụ.

Điều gì sẽ xảy ra tiếp theo

Thành thật mà nói, chúng tôi không biết. Chúng tôi biết rằng chúng tôi rất quan tâm đến việc khám phá MLX, bởi vì đó thường là cách tiếp cận phổ biến hiện tại cho các nhà phát triển bắt đầu với ML trong các ứng dụng gốc và chúng tôi muốn giúp trải nghiệm này trở nên liền mạch nhất có thể. Chúng tôi đang suy nghĩ theo hướng tích hợp tốt hơn với mlx-swift-examples cho LLM và VLM, có thể thông qua các hoạt động tiền xử lý và hậu xử lý mà các nhà phát triển thường gặp phải.

Chúng tôi cũng vô cùng hào hứng với việc sử dụng đại diện nói chung và MCP nói riêng. Chúng tôi nghĩ rằng việc phơi bày các tài nguyên hệ thống cho các quy trình làm việc cục bộ sẽ rất tuyệt vời 🚀

Nếu bạn muốn theo dõi hành trình này hoặc muốn chia sẻ ý tưởng của mình, vui lòng liên hệ với chúng tôi thông qua các mạng xã hội của chúng tôi hoặc repo.

Chúng tôi không thể làm được điều này nếu không có bạn 🫵

Chúng tôi vô cùng biết ơn tất cả những người đóng góp và người dùng thư viện vì sự giúp đỡ và phản hồi của bạn. Chúng tôi yêu tất cả các bạn và rất mong được tiếp tục làm việc với bạn để định hình tương lai của thế hệ trên thiết bị! ❤️


Recommended for You

Chào mừng EmbeddingGemma, mô hình nhúng hiệu quả mới của Google

Chào mừng EmbeddingGemma, mô hình nhúng hiệu quả mới của Google

Các thủ thuật từ OpenAI gpt-oss mà BẠN 🫵 có thể sử dụng với transformers

Các thủ thuật từ OpenAI gpt-oss mà BẠN 🫵 có thể sử dụng với transformers