Bỏ qua, đến nội dung
Kawa Notes
Quay lại

01 · Chạy LLM trên máy tính của bạn với Ollama

Các bài trong chủ đề

Lộ trình cốt lõi dành cho Kỹ sư AI: Kỹ thuật Mô hình Ngôn ngữ Lớn (LLM), RAG, QLoRA và AI Agents

  1. 01 · Chạy LLM trên máy tính của bạn với Ollama
  2. 02 · Nhờ AI đọc và tóm tắt tài liệu ngay trên máy
Minh họa một LLM chạy local trên laptop. Đây là tranh minh họa, không phải ảnh chụp giao diện Ollama.
Minh họa một LLM chạy local trên laptop. Đây là tranh minh họa, không phải ảnh chụp giao diện Ollama.

Cài một LLM lên laptop rồi hỏi nó ngay trong terminal — việc đó mất bao lâu, và máy văn phòng thông thường có làm nổi không?

Mình thường cần một model để thử prompt, viết nháp, hoặc xem một đoạn text được xử lý thế nào mà không phải mở trình duyệt và đăng nhập một dịch vụ cloud. Ollama biến việc đó thành vài bước: cài như phần mềm bình thường, chọn model vừa với máy, rồi trò chuyện bằng lệnh trong terminal.

Bài này đi từ lúc download Ollama đến khi câu trả lời đầu tiên hiện ra trên máy bạn. Đi hết bài, bạn sẽ có một LLM chạy local và biết cách chọn model cho đúng phần RAM mình đang có.

Việc cần giải quyết

Mình cần một cách hỏi model ngay trên laptop: thử prompt, viết nháp, xem câu trả lời sinh ra thế nào, mà không phải mở một chatbot trên trình duyệt mỗi lần. Ollama biến việc đó thành một phần mềm và một file model trên ổ đĩa. Sau khi cài xong, bạn nói chuyện với model bằng terminal, và nhìn thấy toàn bộ vòng đời của câu trả lời nằm trên máy mình.

Ollama chạy trên máy bạn: lệnh được gửi tới runtime, model được nạp từ ổ đĩa vào bộ nhớ, rồi câu trả lời hiện lại trên terminal.
Ollama chạy trên máy bạn: lệnh được gửi tới runtime, model được nạp từ ổ đĩa vào bộ nhớ, rồi câu trả lời hiện lại trên terminal.

Những thứ cần hiểu trước khi cài

LLM — large language model — là chương trình đã được huấn luyện trên rất nhiều văn bản, nên nó đoán được token tiếp theo và nhờ đó trả lời, tóm tắt, dịch, hay viết nháp. Chatbot trên trình duyệt cũng dùng LLM; khác biệt ở đây là model chạy trên máy bạn.

Khi nghe “270 triệu parameters” hay “20 tỷ parameters”, hãy hiểu parameters là những trọng số model đã học được. Số càng lớn, model thường khỏe hơn trên nhiều việc, nhưng file nặng hơn và tốn nhiều RAM hoặc VRAM hơn khi chạy. Các model lớn thường được đo bằng tỷ parameters (ký hiệu B, billion). Bản 270m là 270 triệu — đủ để chắc hệ thống chạy, không đủ để kỳ vọng câu trả lời luôn đúng ý.

Trong Ollama, tên model thường có dạng tên:tag. Phần sau dấu hai chấm là phiên bản hoặc kích thước, ví dụ gemma3:270m hay gpt-oss:20b. Nếu chỉ gõ gemma3 hoặc phi3, Ollama lấy tag latest, tức bản mặc định trên library lúc đó. Nên nhìn kích thước file trên trang library trước khi download, vì số liệu có thể đổi.

Ollama không phải bản thân model. Nó là runtime: download model, nạp vào bộ nhớ, rồi cho bạn nói chuyện với model đó. Phía sau, nó mở một HTTP server trên máy, mặc định lắng nghe tại 127.0.0.1 port 11434. Lệnh ollama run cũng nói chuyện với server này, nên bạn gọi được API bằng curl tới http://localhost:11434. Mặc định, chỉ chương trình trên chính máy đó mới kết nối được — giữ vậy khi mới bắt đầu.

RAM là bộ nhớ hệ thống. VRAM là bộ nhớ trên GPU. Trên Mac Apple Silicon, CPU và GPU dùng chung unified memory. Khi chạy, model phải được nạp vào VRAM nếu có GPU phù hợp, không thì vào RAM. Nếu VRAM không đủ, Ollama có thể đẩy một phần model sang RAM hệ thống; câu trả lời vẫn ra, nhưng thường chậm hơn rõ.

Chuẩn bị máy

Theo tài liệu Ollama tại thời điểm mình viết:

  • Windows: Windows 10 22H2 trở lên, bản Home hoặc Pro.
  • macOS: macOS Sonoma (phiên bản 14) trở lên. Chip Apple M dùng được cả CPU và GPU; máy Intel (x86) chạy được trên CPU.
  • Linux: cài bằng script hoặc gói chính thức. Có GPU thì xem thêm mục driver ở phần xử lý lỗi.

Bản cài Ollama trên Windows cần khoảng 4 GB cho phần mềm. Phần chiếm chỗ lớn là model. Hãy chừa ít nhất bằng kích thước file ghi trên trang library, và nên dư thêm một khoảng trống.

Số liệu dung lượng dưới đây lấy từ library của Ollama và có thể thay đổi, nên đối chiếu lại trên trang model trước khi download. Phần gợi ý bộ nhớ là mức mình thấy hợp lý để chạy thoải mái — không phải một ngưỡng cứng.

ModelDung lượng file (khoảng)Gợi ý khi chạy
gemma3:270mkhoảng 292 MBMáy yếu cũng nên chạy được
phi3khoảng 2,2 GBLaptop phổ thông, còn vài GB RAM trống
gemma3 (bản latest)khoảng 3,3–3,4 GBCần vài GB RAM hoặc VRAM trống
gpt-oss:20bkhoảng 14 GB (nên chừa khoảng 20 GB trống trên ổ đĩa)Khoảng 16 GB RAM, hoặc unified memory trên Mac Apple Silicon

Bạn không bắt buộc phải có GPU. Không có GPU thì model vẫn chạy trên CPU, chỉ thường chậm hơn. Ollama hỗ trợ tăng tốc GPU trên nhiều card NVIDIA (compute capability 5.0 trở lên, cần driver phù hợp), card AMD qua ROCm hoặc Vulkan, và GPU Apple qua Metal. Chi tiết từng dòng card nằm trong tài liệu phần cứng.

Bước 1: Cài Ollama

Mở trình duyệt, vào ollama.com, bấm Download và chọn đúng hệ điều hành đang dùng. File được download như phần mềm bình thường.

Trang Download Ollama với nút Download và các lựa chọn macOS, Linux, Windows.
Trang Download Ollama với nút Download và các lựa chọn macOS, Linux, Windows.

Cài xong thì mở ứng dụng lên:

  • macOS: kéo Ollama vào thư mục Applications, rồi mở từ đó.
  • Windows: cài theo trình hướng dẫn, rồi mở từ menu Start.
  • Linux: ngoài bản download trên web, cách mình thường dùng là chạy script cài đặt chính thức:
curl -fsSL https://ollama.com/install.sh | sh

Khi Ollama mở, bạn sẽ thấy một giao diện chat nhỏ. Lần này mình không dùng giao diện đó. Bấm nút đóng (X) để tắt cửa sổ chat. Ollama vẫn chạy ngầm trên máy, và đó mới là thứ cần cho các lệnh trong terminal.

Giao diện chat của ứng dụng Ollama vừa mở lên. Ảnh: ollama.com
Giao diện chat của ứng dụng Ollama vừa mở lên. Ảnh: ollama.com

Bước 2: Mở terminal và kiểm tra Ollama đã chạy

Mình nói chuyện với Ollama bằng terminal.

  • macOS: Applications → Utilities, mở Terminal.
  • Windows: mở menu Start, gõ PowerShell rồi mở lên.
  • Linux: mở terminal như bạn vẫn làm.

Gõ:

ollama --help

Nếu cài thành công, bạn sẽ thấy bảng trợ giúp với các lệnh có thể dùng. Không thấy gì cả thì xem lại bước cài, rồi đóng terminal và mở lại để máy nhận đường dẫn lệnh mới. Ở các bản mới hơn, nếu chỉ gõ ollama thôi thì thường hiện một màn hình chào, chứ không phải bảng lệnh này.

Bảng trợ giúp các lệnh của Ollama, lấy từ lệnh ollama --help chạy thật trên máy.
Bảng trợ giúp các lệnh của Ollama, lấy từ lệnh ollama --help chạy thật trên máy.

Muốn chắc Ollama đang chạy nền, gõ thêm:

ollama serve

Nếu báo lỗi kiểu address already in use, đó là tin tốt: Ollama đã chạy từ lúc bạn mở ứng dụng, không cần khởi động lần nữa. Nếu nó báo vừa bắt đầu chạy, cũng ổn.

Bước 3: Chạy model đầu tiên

Mình bắt đầu với Gemma 3 bản rất nhỏ: 270 triệu parameters, đủ nhẹ để kiểm tra cả chuỗi đã chạy. Thay vì một câu chào tiếng Anh, mình cho model một việc ngắn bằng tiếng Việt:

ollama run gemma3:270m "Viết bằng tiếng Việt một lời chào ngắn, rồi hỏi tôi cần giúp gì."

Lần đầu, Ollama sẽ download model về máy (khoảng 292 MB) nếu bạn chưa có. Khi thấy câu trả lời, model đã chạy trên máy bạn. Trên máy mình, đúng lệnh đó cho ra:

Lần chạy thật: ollama run gemma3:270m với prompt chào bằng tiếng Việt, và câu trả lời của model trên terminal.
Lần chạy thật: ollama run gemma3:270m với prompt chào bằng tiếng Việt, và câu trả lời của model trên terminal.

Câu trả lời ngắn, đúng tiếng Việt, và đúng ý prompt. Bản 270 triệu parameters không phải lúc nào cũng được như vậy — lát nữa mình sẽ cho nó một việc thực tế hơn để thấy chỗ dễ lệch. Xong cuộc trò chuyện, thoát bằng Ctrl+D. Trên Mac đây là phím Control, không phải phím Command.

Quantization và context window

File gemma3:270m chỉ khoảng 292 MB vì hai lý do bổ sung cho số parameters.

Model gốc thường dùng số có độ chính xác cao, nên rất nặng. Quantization giảm độ chính xác của các trọng số đó — thường xuống khoảng 4 bit hoặc 8 bit — để file nhỏ hơn và vừa RAM hơn. Chất lượng có thể giảm nhẹ, nhưng đây là lý do một model hàng tỷ parameters vẫn chạy được trên laptop. Các model trên Ollama thường đã được đóng gói sẵn ở dạng quantization; bạn không phải tự làm bước này. Trên trang một model, mức quantization thường đi kèm kích thước file.

Khi trò chuyện, model chỉ “nhớ” trong một context window nhất định. Mặc định của Ollama hiện là 4096 token, nên đừng nhồi một văn bản quá dài vào một lượt — dễ bị cắt, lạc đề, hoặc quên điều vừa nói. Với bản 270 triệu parameters, hãy giữ câu hỏi ngắn; việc đọc một thông báo dài hơn mình để sang bài sau.

Bước 4: Chọn model vừa với máy

Quay lại ollama.com, mở mục Models để xem các model open source có thể chạy qua Ollama. Cùng một họ model thường có nhiều kích thước. Nếu chỉ gõ gemma3, bạn thường nhận bản latest — lớn hơn bản 270M rất nhiều, xem lại dung lượng trong bảng ở phần chuẩn bị.

Các model khác nhau có dung lượng rất khác nhau; hãy nhìn kích thước file trước khi download.
Các model khác nhau có dung lượng rất khác nhau; hãy nhìn kích thước file trước khi download.
Trang Models trên ollama.com, danh sách các model open source có thể chạy qua Ollama.
Trang Models trên ollama.com, danh sách các model open source có thể chạy qua Ollama.

Nếu ổ đĩa còn trống đủ như trong bảng, một lựa chọn vừa với nhiều laptop là phi3 (Phi-3 Mini, khoảng 2,2 GB):

ollama run phi3

Lần đầu mất vài phút để download, tùy mạng và máy. Máy đủ mạnh (RAM khoảng 16 GB trở lên, hoặc GPU phù hợp) thì có thể thử gpt-oss:20b — file khoảng 14 GB. Máy không đủ thì bỏ qua; bản nhỏ và bản vừa đã đủ để đi tiếp. Điều kiện máy nằm trong bảng ở trên.

ollama run gpt-oss:20b

Một lưu ý mình thấy khi chạy thật: model nặng hơn không tự động làm tốt mọi việc, nhất là với tiếng Việt. Hãy thử trên đúng việc bạn cần, rồi so câu trả lời, chứ đừng chọn model chỉ vì số parameters. Bài sau mình sẽ làm điều đó với một đoạn thông báo.

Thoát cuộc trò chuyện, vẫn là Ctrl+D.

Khi mọi thứ không chạy như ý

Trước khi cài lại, hãy xem Ollama server còn chạy không, rồi mới đổi model.

Lệnh không tìm thấy (command not found)

Gõ ollama hoặc ollama --help mà báo command not found thì thường là cài chưa xong, hoặc cửa sổ terminal cũ chưa nhận được đường dẫn lệnh mới. Mở lại Terminal hoặc PowerShell, rồi thử lại.

Trên macOS, khi mở ứng dụng lần đầu, Ollama có thể hỏi quyền để tạo liên kết lệnh tại /usr/local/bin. Trên Windows, trình cài thường thêm thư mục chương trình vào PATH của tài khoản; nếu lệnh vẫn không chạy, mở lại terminal sau khi cài, hoặc kiểm tra PATH có chứa thư mục Ollama không.

Port 11434 đã bị chiếm (address already in use)

ollama serve báo address already in use không phải lỗi cần sửa. Ollama đã chạy rồi (thường là từ lúc bạn mở ứng dụng), cứ dùng ollama run bình thường.

Máy báo hết bộ nhớ, hoặc bị đóng đột ngột khi chạy model lớn

Đây thường là model nặng hơn phần RAM hoặc VRAM đang trống. Đóng bớt ứng dụng khác, chọn bản nhỏ hơn (gemma3:270m hoặc phi3), hoặc gỡ model đang nạp bằng:

ollama stop gemma3:270m

Đổi gemma3:270m thành tên model bạn đang chạy, rồi thử lại với model nhẹ hơn.

Trả lời chậm

Nếu máy không dùng được GPU, hoặc VRAM không đủ nên Ollama phải đẩy một phần model sang RAM hệ thống, tốc độ sẽ chậm hơn rõ. Kiểm tra bằng:

ollama ps

Cột Processor cho biết model đang chạy trên GPU, trên CPU, hay bị chia giữa cả hai. 100% GPU là đang dùng GPU; 100% CPU là đang chạy trên RAM hệ thống. Model càng lớn và context window càng dài thì càng dễ chậm.

Download model thất bại hoặc download mãi không xong

Lần đầu phải download file về máy, nên mạng chậm hoặc ổ đĩa đầy rất dễ làm việc này đứt giữa chừng. Kiểm tra dung lượng trống, rồi chạy lại:

ollama pull gemma3:270m

Đổi tên model nếu bạn đang download bản khác. Nếu đang dùng mạng công ty hoặc proxy, Ollama cần HTTPS_PROXY được cấu hình đúng; chi tiết nằm trong câu hỏi thường gặp của Ollama.

GPU không được nhận

Model vẫn chạy được trên CPU, nhưng nếu bạn kỳ vọng có GPU mà ollama ps vẫn hiện 100% CPU, hãy kiểm tra driver. Trên máy NVIDIA, lệnh nvidia-smi nên in ra thông tin GPU. Driver cần đủ mới (với NVIDIA, tài liệu Ollama yêu cầu compute capability 5.0 trở lên và driver phù hợp). Trên Linux, sau khi máy ngủ đông rồi thức dậy, đôi khi GPU NVIDIA không được nhận lại; tài liệu gợi ý tải lại module nvidia_uvm. Log cũng giúp ích: trên macOS xem ~/.ollama/logs/server.log; trên Linux nếu cài bằng dịch vụ systemd thì dùng journalctl -u ollama; trên Windows, log nằm trong thư mục dữ liệu của Ollama, file server.log (mở thư mục %LOCALAPPDATA%\Ollama).

Xem, gỡ và theo dõi model

ollama ls

Liệt kê các model đã download về máy. ollama list cũng là cùng một lệnh.

ollama ps

Xem model nào đang được nạp trong bộ nhớ, chiếm bao nhiêu, và đang chạy trên CPU hay GPU.

ollama rm phi3

Xóa model khỏi ổ đĩa để lấy lại dung lượng. Đổi phi3 thành tên bạn muốn gỡ. Lệnh này không gỡ Ollama, chỉ xóa model đó.

Vài tình huống dễ gặp trong các bước trên:

  • Không thoát được cuộc trò chuyện trên Mac: dùng Ctrl+D, không phải Cmd+D.
  • Model trả lời lệch hoặc quên ngữ cảnh: bản gemma3:270m vốn rất nhỏ. Thử một bản lớn hơn nếu máy đủ chỗ, giữ câu hỏi gọn trong context window, và đọc lại câu trả lời trước khi dùng.
  • Đã đóng cửa sổ chat của Ollama: đúng, mình muốn vậy. Ứng dụng vẫn chạy nền, nên lệnh trong terminal mới hoạt động được.

Dùng vào việc thật

Khi đã trò chuyện được, mình thường đưa model một việc cụ thể hơn một lời chào. Ví dụ, nhờ viết một tin nhắn:

ollama run gemma3:270m "Viết giúp một tin nhắn tiếng Việt, giọng lịch sự, khoảng 2 câu, để xin dời lịch họp sang sáng mai."

Khi mình chạy đúng lệnh này với gemma3:270m, model trả lời:

Xin cảm ơn bạn đã trao đổi. Chúng tôi rất mong nhận được sự hợp tác.

Câu tiếng Việt thì lịch sự, nhưng không xin dời lịch họp. Đây là chỗ bản 270 triệu parameters dễ lộ: nó chạy được, mà vẫn trượt việc. Hãy đọc lại output, rồi thử cùng prompt với một model khác nếu máy đủ chỗ — đừng tin bản nhỏ chỉ vì nó trả lời trôi chảy.

Dịch một câu ngắn, hoặc hỏi giúp một đoạn code, cũng theo cùng cách: một prompt rõ, một lần chạy, rồi tự kiểm tra.

Gọi API local bằng curl

Vì Ollama đang lắng nghe tại http://localhost:11434, bạn gọi HTTP như gọi một API bình thường. Dùng "stream": false để nhận trọn một JSON, dễ đọc hơn khi mới thử.

curl http://localhost:11434/api/generate \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gemma3:270m",
    "prompt": "Trả lời bằng tiếng Việt, một câu: quantization giúp ích gì khi chạy model trên laptop?",
    "stream": false
  }'

Trò chuyện với /api/chat (có danh sách tin nhắn):

curl http://localhost:11434/api/chat \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gemma3:270m",
    "messages": [
      {"role": "user", "content": "Dịch sang tiếng Việt, chỉ một câu: The model is running on your computer."}
    ],
    "stream": false
  }'

Đổi "model" thành model bạn đã download. Tài liệu đầy đủ nằm ở Generate và Chat.

Bài tập tự luyện

  1. Chạy lại đúng prompt lời chào ở bước 3 với gemma3:270m. Rồi chạy prompt tin nhắn dời lịch họp ở trên. So câu trả lời: việc nào model làm đúng, việc nào bị trượt.
  2. Nếu máy đủ chỗ cho phi3, chạy cùng prompt tin nhắn dời lịch họp bằng tiếng Việt, rồi một lần nữa bằng tiếng Anh:
ollama run phi3 "Write a polite message in about two sentences asking to move a meeting to tomorrow morning."

So sánh xem model có giữ đúng yêu cầu ở ngôn ngữ nào hơn. (Trên máy mình, bản tiếng Anh của phi3 bám việc rõ hơn bản tiếng Việt.)

  1. Nhờ model tóm tắt đoạn sau thành đúng 3 gạch đầu dòng, bằng tiếng Việt. Đọc lại xem còn giữ được ý “một ghi chú nhỏ cũng làm chậm đơn hàng” không:
Chiều thứ sáu, một đơn hàng sách đặt từ đầu tháng có thông báo chuyển hoàn. Lý do trên tin nhắn là không liên hệ được người nhận, dù số điện thoại vẫn liên lạc được. Nhân viên bưu tá để lại phiếu kẹp cửa, hẹn sáng thứ hai sẽ phát lại. Người nhận gọi tổng đài, chờ gần mười phút, rồi được hướng dẫn kiểm tra địa chỉ trên ứng dụng. Số nhà không sai, nhưng ghi chú “gọi trước khi phát” bị trống. Sau khi bổ sung ghi chú và xin phát lại chiều thứ ba, đơn hàng tới đúng hẹn. Tờ phiếu kẹp cửa vẫn còn đó, như lời nhắc rằng một khâu nhỏ cũng đủ làm chậm cả tuần chờ đợi.
  1. Khi một model đang chạy, mở thêm một cửa sổ terminal, gõ ollama ps và ghi lại cột Processor. Rồi ollama stop với tên model đó và chạy ollama ps lần nữa để thấy model đã ra khỏi bộ nhớ.

Câu hỏi thường gặp

Prompt của mình có bị gửi lên ollama.com không? Khi chạy model local, Ollama xử lý trên máy bạn; tài liệu chính thức cho biết họ không thấy prompt hoặc dữ liệu của bạn trong trường hợp này. Việc download model vẫn cần mạng.

Model nằm ở đâu trên ổ đĩa? Mặc định, trên macOS là ~/.ollama/models; trên Windows là thư mục .ollama/models trong thư mục người dùng; trên Linux, bản cài chính thức thường dùng /usr/share/ollama/.ollama/models. Bạn có thể đổi vị trí bằng biến môi trường OLLAMA_MODELS.

Mình có cần GPU không? Không. GPU chủ yếu giúp nhanh hơn. Không có GPU thì model vẫn chạy trên CPU.

Nên bắt đầu với model nào? Bắt đầu với bản nhỏ như gemma3:270m để chắc Ollama chạy, rồi mới download bản nặng hơn nếu máy còn chỗ và việc bạn làm thực sự cần chất lượng tốt hơn. Luôn thử trên đúng prompt của bạn.

Tài liệu tham khảo

Các liên kết dưới đây mình đã kiểm tra là mở được tại thời điểm viết bài:

Bản nhỏ để chắc hệ thống chạy. Bản vừa hoặc lớn hơn chỉ đáng download khi việc bạn làm thực sự cần. Phần đáng làm tiếp theo là đưa một đoạn tài liệu tiếng Việt vào model local và so câu tóm tắt — đó là bài sau.



Bài sau
02 · Nhờ AI đọc và tóm tắt tài liệu ngay trên máy