Khóa học
Google DeepMind vừa phát hành Gemma 3, thế hệ tiếp theo của các mô hình mã nguồn mở của họ. Gemma 3 được thiết kế để chạy trực tiếp trên các thiết bị tài nguyên thấp như điện thoại và laptop. Những mô hình này được tối ưu cho hiệu năng nhanh trên một GPU hoặc TPU và có nhiều kích thước để phù hợp với nhu cầu phần cứng khác nhau.
Trong hướng dẫn này, tôi sẽ giải thích từng bước cách thiết lập và chạy Gemma 3 cục bộ bằng Ollama. Sau đó, tôi sẽ chỉ bạn cách dùng Gemma 3 và Python để xây dựng một trợ lý tệp.
Vì sao chạy Gemma 3 cục bộ?
Chạy một mô hình ngôn ngữ lớn (LLM) như Gemma 3 cục bộ mang lại nhiều lợi ích quan trọng:
- Quyền riêng tư: Dữ liệu nằm trên thiết bị, bảo vệ thông tin nhạy cảm.
- Độ trễ thấp: Loại bỏ việc truyền qua internet, cho phản hồi nhanh hơn.
- Tùy biến: Có thể điều chỉnh mô hình theo nhu cầu và thử nghiệm cụ thể.
- Tiết kiệm chi phí: Giảm phí sử dụng đám mây bằng cách tận dụng phần cứng sẵn có.
- Khả năng ngoại tuyến: Ứng dụng vẫn hoạt động khi không có kết nối internet.
- Kiểm soát: Tăng cường bảo mật và kiểm soát môi trường tính toán của chúng ta.
Thiết lập Gemma 3 cục bộ với Ollama
Cài đặt Ollama
Ollama là một nền tảng có sẵn cho Windows, Mac và Linux, hỗ trợ chạy và phân phối các mô hình AI, giúp nhà phát triển dễ dàng tích hợp các mô hình này vào dự án. Chúng ta sẽ dùng nó để tải và chạy Gemma 3 cục bộ.
Bước đầu tiên là tải và cài đặt từ trang web chính thức của Ollama.

Khi cài đặt, hãy nhớ cài đặt dòng lệnh:

Sau khi hoàn tất cài đặt, chúng ta có thể kiểm tra xem đã cài đúng chưa bằng lệnh ollama trong terminal. Kết quả mong đợi như sau:

Tải Gemma 3
Để tải một mô hình với Ollama, dùng lệnh pull:
ollama pull <model_name>:<model_version>
Danh sách các mô hình có sẵn có tại thư viện của Ollama.
Gemma 3, cụ thể, có bốn mô hình: 1b, 4b, 12b và 27b, trong đó b là billion (tỷ), chỉ số lượng tham số của mô hình.
Ví dụ, để tải gemma3 với 1b tham số, ta dùng lệnh:
ollama pull gemma3:1b
Nếu không chỉ định phiên bản mô hình, mặc định sẽ tải mô hình 4b:
ollama pull gemma3
Liệt kê các mô hình cục bộ
Chúng ta có thể liệt kê các mô hình đang có cục bộ bằng lệnh sau:
ollama list
Trường hợp của tôi, đầu ra cho thấy tôi có hai mô hình:
NAME ID SIZE MODIFIED
gemma3:1b 2d27a774bc62 815 MB 38 seconds ago
gemma3:latest c0494fe00251 3.3 GB 22 minutes ago
Trò chuyện trong terminal
Chúng ta có thể dùng Ollama để trò chuyện với một mô hình bằng lệnh run:
ollama run gemma3

Lưu ý nếu dùng lệnh run với mô hình chưa tải về, nó sẽ tự động được tải bằng pull.
Chạy Gemma 3 nền
Để dùng Gemma 3 với Python, ta cần chạy nó ở chế độ nền. Có thể làm điều này bằng lệnh serve:
ollama serve
Nếu bạn gặp lỗi sau khi chạy lệnh, rất có thể Ollama đã chạy sẵn:
Error: listen tcp 127.0.0.1:11434: bind: address already in use
Lỗi này có thể xảy ra khi Ollama tiếp tục chạy trong nền.
Dùng Gemma 3 cục bộ với Python
Thiết lập môi trường Python
Ollama cung cấp một gói Python để dễ dàng kết nối với các mô hình đang chạy trên máy của chúng ta.
Chúng ta sẽ dùng Anaconda để thiết lập môi trường Python và thêm các phụ thuộc cần thiết. Cách làm này giúp tránh xung đột với các gói Python khác có sẵn.
Khi đã cài Anaconda, ta thiết lập môi trường bằng lệnh:
conda create -n gemma3-demo -y python=3.9
Lệnh này tạo môi trường tên gemma3-demo dùng Python phiên bản 3.9. Tùy chọn -y tự động trả lời có cho mọi câu hỏi trong quá trình thiết lập.
Tiếp theo, kích hoạt môi trường bằng:
conda activate gemma3-demo
Cuối cùng, cài gói ollama bằng lệnh:
pip install ollama
Gửi tin nhắn tới Gemma 3 bằng Python
Cách gửi một tin nhắn tới Gemma 3 bằng Python:
from ollama import chat
response = chat(
model="gemma3",
messages=[
{
"role": "user",
"content": "Why is the sky blue?",
},
],
)
print(response.message.content)
Tùy phần cứng của bạn, mô hình có thể mất một lúc để trả lời, nên hãy kiên nhẫn khi chạy script.
Như đã thấy trước đó, gemma3 mặc định là gemma3:4b. Vì vậy khi chỉ định model="gemma3", mô hình đó sẽ được dùng.
Để dùng mô hình khác—chẳng hạn bản 1B—chúng ta cần truyền đối số model=”gemma3:1b” (với điều kiện đã kéo về trước bằng lệnh ollama pull gemma3:1b). Để liệt kê các mô hình có sẵn, dùng lệnh ollama list.
Nếu muốn stream câu trả lời từng từ, ta có thể dùng stream=True và in phản hồi theo từng phần:
from ollama import chat
stream = chat(
model="gemma3",
messages=[{"role": "user", "content": "Why is the sky blue?"}],
stream=True,
)
for chunk in stream:
print(chunk["message"]["content"], end="", flush=True)
Cách này mang lại trải nghiệm tốt hơn vì người dùng không phải đợi tạo xong toàn bộ câu trả lời.
Để tìm hiểu thêm về gói ollama, hãy xem tài liệu của họ.
Xây dựng trợ lý tệp bằng Gemma 3
Trong phần này, chúng ta học cách xây dựng một script Python cho phép đặt câu hỏi về nội dung của một tệp văn bản ngay từ terminal. Script này hữu ích cho các tác vụ như kiểm tra lỗi trong tệp mã hoặc truy vấn thông tin từ bất kỳ tài liệu nào.
Tổng quan về script
Mục tiêu là tạo một công cụ dòng lệnh bằng Python, đọc một tệp văn bản và dùng Gemma 3 để trả lời các câu hỏi liên quan đến nội dung của nó. Dưới đây là hướng dẫn từng bước:
Thiết lập cấu trúc script
Trước tiên, cần thiết lập script Python với các import cần thiết và cấu trúc cơ bản:
import sys
from ollama import chat
def ask_questions_from_file(file_path):
# Read the content of the text file
with open(file_path, "r") as file:
content = file.read()
# Loop to keep asking questions
while True:
question = input("> ")
print()
if question.lower() == "exit":
break
# Use Gemma 3 to get answers
stream = chat(
model="gemma3",
messages=[
{"role": "user", "content": content},
{"role": "user", "content": question},
],
stream=True,
)
for chunk in stream:
print(chunk["message"]["content"], end="", flush=True)
if __name__ == "__main__":
if len(sys.argv) != 2:
print("Usage: python ask_file.py <path_to_text_file>")
else:
file_path = sys.argv[1]
ask_questions_from_file(file_path)
Chức năng cốt lõi được gói trong hàm ask_questions_from_file(). Hàm này nhận đường dẫn tệp làm đối số và bắt đầu bằng cách mở, đọc nội dung từ tệp văn bản chỉ định. Nội dung này sẽ được dùng như thông tin nền để trả lời câu hỏi.
Khi đã nạp nội dung tệp, script đi vào vòng lặp liên tục yêu cầu chúng ta nhập câu hỏi. Khi nhập một câu hỏi, script gửi nội dung tệp cùng câu hỏi của chúng ta tới mô hình Gemma 3, mô hình sẽ xử lý để tạo câu trả lời.
Việc tương tác với mô hình diễn ra qua cơ chế streaming, cho phép hiển thị câu trả lời theo thời gian thực ngay khi được tạo. Nếu nhập exit, vòng lặp dừng và script kết thúc.
Cuối script có phần kiểm tra đảm bảo chạy đúng cách với một đối số dòng lệnh là đường dẫn tới tệp văn bản. Nếu không có đối số, script sẽ hiển thị thông điệp hướng dẫn cách chạy đúng. Thiết lập này cho phép chúng ta điều khiển script hiệu quả từ dòng lệnh.
Chạy script
Lưu đoạn mã trên vào một tệp, ví dụ ask.py. Để kiểm thử script, chạy lệnh:
python ask.py ask.py
Lệnh này sẽ chạy script để đặt câu hỏi về chính nó (vì vậy ask.py xuất hiện hai lần). Ví dụ dưới đây yêu cầu giải thích cách script hoạt động:

Kết luận
Chúng ta đã thiết lập và học cách chạy Gemma 3 cục bộ bằng Ollama và Python. Cách tiếp cận này đảm bảo quyền riêng tư cho dữ liệu, mang lại độ trễ thấp, khả năng tùy biến và có thể tiết kiệm chi phí. Những bước trên không chỉ áp dụng cho Gemma 3—mà còn có thể áp dụng cho các mô hình khác được lưu trữ trên Ollama.
Nếu muốn nâng cấp chức năng của script, chúng ta có thể mở rộng để xử lý PDF. Cách tốt nhất là dùng API Mistral OCR. Ta có thể chuyển PDF thành văn bản, cho phép script trả lời câu hỏi về PDF, khiến nó linh hoạt và mạnh mẽ hơn.
Với các công cụ này, chúng ta đã sẵn sàng khám phá và tương tác với các mô hình lớn ngay trên thiết bị của mình.
Câu hỏi thường gặp
Yêu cầu phần cứng để chạy Gemma 3 cục bộ là gì?
Khả năng chạy Gemma 3 cục bộ phụ thuộc vào kích thước mô hình bạn chọn tải. Các mô hình nhỏ như gemma3:1b được thiết kế hiệu quả và có thể chạy trên thiết bị ít mạnh hơn, như laptop với một GPU hoặc thậm chí một số máy tính bảng cấu hình cao. Các mô hình lớn như gemma3:27b đòi hỏi tài nguyên tính toán nhiều hơn, chẳng hạn một workstation đa nhân với GPU cao cấp. Luôn kiểm tra thông số thiết bị của bạn so với yêu cầu tài nguyên của mô hình để đảm bảo tương thích.
Tôi có thể chạy nhiều phiên bản Gemma 3 cùng lúc không?
Có, bạn có thể chạy đồng thời nhiều phiên bản Gemma 3, miễn là tài nguyên phần cứng (CPU, GPU và bộ nhớ) đủ để xử lý tải tính toán bổ sung. Mỗi phiên bản mô hình chạy nền sẽ tiêu tốn thêm tài nguyên hệ thống, vì vậy hãy chắc chắn hệ thống của bạn có thể xử lý nhiều tiến trình mà không suy giảm hiệu năng đáng kể.
Có bắt buộc dùng Anaconda để thiết lập môi trường Python không?
Anaconda rất được khuyến nghị vì giúp tạo môi trường biệt lập, quản lý phụ thuộc và tránh xung đột với các gói Python khác, nhưng không bắt buộc. Bạn cũng có thể dùng các công cụ môi trường ảo khác như venv hoặc virtualenv.
