Các mô hình ngôn ngữ lớn (LLM) hiện đã trở thành một phần không thể thiếu trong nhiều lĩnh vực công nghệ, với hầu hết sản phẩm đều tích hợp một mức độ tính năng dựa trên LLM. Tuy nhiên, việc triển khai các mô hình này trên thiết bị cá nhân như laptop, máy tính để bàn hoặc điện thoại thông minh đã gặp trở ngại đáng kể do hạn chế về phần cứng.
Để đáp lại, đội ngũ PyTorch đã giới thiệu Torchchat, một khung linh hoạt nhằm nâng cao hiệu suất của LLM trên nhiều nền tảng phần cứng. Cách tiếp cận đột phá này tạo điều kiện cho việc xử lý cục bộ hiệu quả trên nhiều loại thiết bị, có thể giúp các mô hình AI tiên tiến trở nên dễ tiếp cận hơn.
PyTorch là một khung máy học mã nguồn mở hàng đầu do Phòng thí nghiệm Nghiên cứu AI của Facebook (FAIR) phát triển. Nó hỗ trợ nhiều ứng dụng, bao gồm thị giác máy tính và xử lý ngôn ngữ tự nhiên.
Trong bài viết này, chúng ta sẽ điểm qua các khả năng của Torchchat và học cách thiết lập nó trên máy cục bộ.
Các khả năng của Torchchat
Torchchat cung cấp bốn chức năng chính:
- Chạy LLM bằng Python với PyTorch.
- Vận hành các mô hình độc lập trên ứng dụng desktop hoặc máy chủ mà không cần Python.
- Thực thi mô hình trên thiết bị di động.
- Đánh giá hiệu năng mô hình.
Chạy LLM bằng Python với PyTorch
Chế độ này cho phép chạy một LLM trên máy có cài đặt Python và PyTorch. Chúng ta có thể tương tác trực tiếp với mô hình trong terminal hoặc thiết lập máy chủ với REST API. Đây là phần chúng ta sẽ tập trung thiết lập trong bài viết này.
Vận hành mô hình độc lập
Torchchat sử dụng AOT Inductor (Ahead-of-Time Inductor) để tạo một tệp thực thi độc lập, có thể phân phối cho chương trình suy luận PyTorch, cụ thể là dưới dạng thư viện động không phụ thuộc vào Python và PyTorch.
Cách tiếp cận này đáp ứng nhu cầu triển khai mô hình trong môi trường production, nơi yêu cầu tính ổn định của môi trường chạy mô hình qua các lần cập nhật và thay đổi của môi trường phục vụ, đảm bảo mô hình vẫn hoạt động mà không cần biên dịch lại.
AOT Inductor tập trung tối ưu triển khai mô hình bằng cách cho phép các định dạng phân phối nhị phân hiệu quả, tải nhanh và sẵn sàng thực thi, khắc phục những hạn chế và chi phí phát sinh của các định dạng văn bản như TorchScript. Nó tận dụng kỹ thuật sinh mã và tối ưu cho cả CPU và GPU, nhằm giảm chi phí và cải thiện tốc độ thực thi.
Thực thi trên thiết bị di động
Đối với việc thực thi trên thiết bị di động, Torchchat tận dụng ExecuTorch. Tương tự AOT Inductor, ExecuTorch tối ưu mô hình để thực thi trên thiết bị di động hoặc nhúng. Nó tạo ra một hiện vật PTE có thể dùng để thực thi mô hình sau đó.
Đánh giá mô hình
Chế độ đánh giá của Torchchat có thể dùng để đánh giá hiệu năng của một LLM trên nhiều tác vụ có trong lm_eval. Đây là tính năng quan trọng đối với những người làm nghiên cứu muốn đánh giá các mô hình mới của họ trên các bộ chuẩn thường dùng.
Vì sao dùng Torchchat
Chạy LLM cục bộ thay vì dựa vào API đám mây của bên thứ ba như API của OpenAI mang lại nhiều trường hợp sử dụng và lợi ích, đáp ứng các nhu cầu và bối cảnh khác nhau.
- Ứng dụng nhạy cảm về quyền riêng tư: Với các ngành xử lý dữ liệu nhạy cảm như y tế, tài chính và pháp lý, chạy LLM cục bộ đảm bảo thông tin mật không rời khỏi hạ tầng của tổ chức, tuân thủ quy định bảo vệ dữ liệu.
- Ứng dụng thời gian thực: Các ứng dụng yêu cầu phản hồi độ trễ thấp, như chatbot tương tác, tạo nội dung thời gian thực và hệ thống giám sát trực tuyến, có thể hưởng lợi từ việc chạy LLM cục bộ, loại bỏ độ trễ do truyền tải mạng đến và đi từ API đám mây.
- Kịch bản ngoại tuyến hoặc kết nối yếu: Trong môi trường kết nối Internet kém hoặc không có, triển khai cục bộ cho phép sử dụng các ứng dụng LLM, như nghiên cứu hiện trường, giáo dục từ xa và hệ thống giải trí trên máy bay.
- Kiểm soát và tối ưu chi phí: Với các trường hợp khối lượng lớn hoặc sử dụng liên tục, triển khai cục bộ có thể tiết kiệm chi phí hơn, tránh mô hình tính phí theo từng yêu cầu của API đám mây và tận dụng tài nguyên tính toán sẵn có.
Nếu bạn quan tâm đến việc tìm hiểu thêm về chạy mô hình AI trên thiết bị thay vì trên đám mây, tôi gợi ý bài viết về Edge AI.
Thiết lập cục bộ với Python
Hãy thiết lập Torchchat cục bộ theo từng bước. Chúng ta sẽ bắt đầu bằng cách nhân bản kho Torcchat.
Nhân bản hoặc tải mã nguồn
Bước đầu tiên để thiết lập Torchchat cục bộ là nhân bản kho Torchchat. Khi đã cài đặt Git, chúng ta có thể nhân bản kho bằng cách mở terminal và chạy lệnh:
git clone git@github.com:pytorch/torchchat.git
Ngoài ra, chúng ta có thể tải kho về bằng giao diện Github.

Cài đặt
Chúng ta giả định rằng Python 3.10 đã được cài đặt. Để biết cách cài Python, hãy xem bài viết này.
Để cài Torchchat, mở terminal trong thư mục Torchchat. Chúng ta bắt đầu bằng việc tạo một môi trường ảo:
python -m venv .venv
Nói ngắn gọn, môi trường ảo là một thư mục tự chứa cho dự án, bao gồm các thư mục cài đặt thư viện, gói Python và đôi khi cả một phiên bản Python cụ thể. Điều này đảm bảo mỗi dự án có đúng phiên bản phần mềm cần thiết để chạy, không bị can thiệp bởi dự án khác và yêu cầu của chúng.
Sau khi tạo môi trường ảo, chúng ta cần kích hoạt nó. Có thể thực hiện với lệnh:
source .venv/bin/activate
Cuối cùng, cần thiết lập môi trường bằng cách cài tất cả phụ thuộc cần thiết để Torchchat chạy. Torchchat cung cấp script cài đặt, install_requirements.sh, có thể chạy bằng lệnh:
./install_requirements.sh
Giờ đây Torchchat đã được cài và sẵn sàng sử dụng. Chúng ta có thể kiểm tra cài đặt bằng cách liệt kê các lệnh Torchchat khả dụng, như sau:
python torchchat.py --help
Sử dụng Torchchat cục bộ với Python
Khi đã cài Torchchat, chúng ta có thể bắt đầu chạy LLM trên máy cục bộ.
Liệt kê tất cả mô hình được hỗ trợ
TorchChat hỗ trợ nhiều LLM. Chúng ta có thể liệt kê các mô hình được hỗ trợ bằng lệnh list:
python torchchat.py list
Danh sách đầy đủ các mô hình đều có trong kho GitHub của họ.

Mục “Ghi chú” cung cấp thông tin hữu ích về mô hình, như trường hợp sử dụng phù hợp nhất và bí danh mô hình dùng để chỉ định mô hình khi dùng các lệnh Torchchat.
Tải một mô hình
Torchchat sử dụng Hugging Face làm kênh phân phối mô hình. Hugging Face là nền tảng hợp tác với các công cụ giúp bất kỳ ai cũng có thể tạo, huấn luyện và triển khai mô hình NLP và ML bằng mã nguồn mở. Để tìm hiểu thêm, hãy xem bài viết Hugging Face là gì.
Trước khi tải một mô hình, chúng ta cần:
- Cài đặt giao diện dòng lệnh của Hugging Face
- Tạo tài khoản trên Hugging Face
- Tạo mã truy cập (access token)
- Đăng nhập bằng giao diện dòng lệnh của Hugging Face
Để cài đặt giao diện dòng lệnh của Hugging Face, chúng ta dùng pip:
pip install huggingface_hub
Sau đó, truy cập trang web Hugging Face để tạo tài khoản. Sau khi tạo tài khoản, chúng ta có thể tạo token truy cập bằng cách vào phần cài đặt hồ sơ:

Trong hồ sơ, chúng ta có thể mở mục “Access Tokens” để tạo token mới:

Về quyền của token, quyền đọc là đủ cho bài viết này. Lưu ý khi token được tạo, chúng ta cần sao chép nó vào clipboard vì sẽ không thể xem lại sau.
Sử dụng token, chúng ta có thể đăng nhập bằng lệnh sau:
huggingface-cli login
Khi đã đăng nhập, có thể tải mô hình bằng lệnh download. Lưu ý một số mô hình có kích thước khá lớn nên hãy đảm bảo bạn có đủ dung lượng đĩa. Để minh họa, chúng ta sẽ dùng mô hình stories15M, một mô hình nhỏ tạo truyện. Đây là mô hình tốt để bắt đầu vì tải nhanh và không yêu cầu quyền đặc biệt.
Để tải, hãy chạy:
python torchchat.py download stories15M
Chạy một mô hình
Sau khi tải mô hình, chúng ta có thể dùng lệnh chat hoặc generate. Để tạo văn bản, cần cung cấp prompt bằng đối số --prompt. Ví dụ:
python torchchat.py generate stories15M --prompt “Once upon a time”
Lệnh trên sẽ yêu cầu Torchchat tạo văn bản bằng mô hình stories15M với prompt ”Once upon a time”.
Để chạy mô hình ở chế độ trò chuyện, dùng lệnh chat không kèm prompt.
python torchchat.py chat stories15M
Lệnh chat sẽ mở một phiên chat tương tác trong terminal, nơi chúng ta có thể trò chuyện qua lại với LLM. Lưu ý một số mô hình phù hợp hơn với chế độ generate, trong khi số khác phù hợp hơn với chế độ chat. Thông tin này có trong mục “Ghi chú” của tài liệu mô hình.
Yêu cầu quyền truy cập vào một mô hình
Một số mô hình như llama3 cần quyền đặc biệt để tải. Nếu thử tải một mô hình như vậy, chúng ta sẽ nhận thông báo lỗi:
Access to model meta-llama/Meta-Llama-3-8B-Instruct is restricted and you are not in the authorized list. Visit https://huggingface.co/meta-llama/Meta-Llama-3-8B-Instruct to ask for access.
Chúng ta có thể yêu cầu quyền truy cập bằng cách làm theo URL trong thông báo lỗi. Cần điền một biểu mẫu ngắn với thông tin cá nhân và đồng ý điều khoản dịch vụ. Bạn sẽ nhận email khi được chấp thuận.

Sử dụng nâng cao
Torchchat cung cấp một số tùy chọn bổ sung khi chạy LLM cục bộ, cho phép điều chỉnh theo nhu cầu và phần cứng của chúng ta. Hãy khám phá một vài tùy chọn này.
Kiểm soát độ chính xác (precision)
LLM phụ thuộc nhiều vào phép nhân ma trận, tức là nhân rất nhiều số dấu phẩy động. Có nhiều kiểu dữ liệu để biểu diễn số dấu phẩy động trong máy tính với các mức độ chính xác khác nhau.
Độ chính xác cao có thể đảm bảo những sắc thái học được trong quá trình huấn luyện được thể hiện trung thực khi suy luận, đặc biệt cho các tác vụ phức tạp hoặc hiểu ngôn ngữ tinh tế. Tuy nhiên, dùng số có độ chính xác cao có thể làm chậm suy luận đáng kể. Kiểu dữ liệu phù hợp phụ thuộc vào đánh đổi giữa tốc độ và độ chính xác.
Để đặt kiểu dữ liệu khi chạy LLM, chúng ta có thể dùng tham số --dtype, ví dụ:
python torchchat.py chat --dtype fast stories15M
Biên dịch Just-In-Time
Cờ --compile bật biên dịch Just-In-Time (JIT) cho mô hình. JIT là kỹ thuật tối ưu hiệu năng suy luận bằng cách biên dịch động một phần mô hình thành mã máy ở thời điểm chạy thay vì diễn giải mỗi lần thực thi. Cách này có thể cải thiện đáng kể hiệu quả và tốc độ cho mô hình chạy trên nhiều nền tảng phần cứng.
Dùng JIT sẽ khiến thời gian khởi động cao hơn do bước biên dịch bổ sung, nhưng suy luận sẽ nhanh hơn. Sau đây là cách dùng chat cùng với JIT:
python torchchat.py chat --compile stories15M
Lưu ý tùy chọn này có thể không được hỗ trợ trên mọi loại phần cứng. Khi đó, Torchchat sẽ bỏ qua bước biên dịch và chạy LLM mà không có nó.
Lượng tử hóa (Quantization)
Lượng tử hóa là kỹ thuật giảm kích thước mô hình và tăng tốc độ suy luận mà không làm giảm đáng kể hiệu năng hoặc độ chính xác. Điều này đặc biệt quan trọng khi triển khai LLM trên thiết bị biên hoặc trong môi trường tài nguyên tính toán, bộ nhớ và băng thông hạn chế.
Tóm lại, lượng tử hóa là chuyển trọng số và kích hoạt của mạng nơ-ron từ biểu diễn số thực (thường là float 32-bit) sang các biểu diễn ít bit hơn, như số nguyên 16-bit, 8-bit, hoặc thậm chí nhị phân trong một số trường hợp.
Điều này khác với việc đặt độ chính xác bằng --dtype. Lượng tử hóa tác động trực tiếp lên trọng số mô hình, tạo ra mô hình nhỏ hơn, trong khi kiểu dữ liệu chỉ định loại dữ liệu dùng trong phép tính suy luận.
Dùng lượng tử hóa trong Torchchat cần một tệp cấu hình JSON và có thể dùng như sau:
python torchchat.py chat --quantize config.json stories15M
Để biết chi tiết về định dạng tệp cấu hình config.json hoặc cách lượng tử hóa hoạt động trong Torchchat, hãy xem trang tài liệu về lượng tử hóa của họ.
Chỉ định thiết bị
Chúng ta có thể chỉ định thiết bị dùng để thực thi LLM bằng tùy chọn --device. Ví dụ, để chạy trên CUDA, ta dùng:
python torchchat.py chat --device cuda stories15M
Kết luận
Torchchat là một bước tiến lớn trong việc dân chủ hóa suy luận LLM. Nó giúp bất kỳ ai cũng có thể chạy LLM hiệu quả trên nhiều loại thiết bị.
Torchchat còn cung cấp nhiều khả năng hơn so với những gì chúng ta giới thiệu trong bài viết này. Chúng tôi đã cung cấp các giải thích cần thiết để bất kỳ ai cũng có thể bắt đầu chạy LLM cục bộ trên máy tính bằng Python và PyTorch. Tôi khuyến khích bạn tiếp tục khám phá Torchchat.
