Thông báo lỗi
Bạn cuối cùng đã tải xuống một mô hình mới mạnh mẽ, nhưng ngay khi bạn cố gắng chạy nó, Ollama bị treo. Thay vì lời nhắc trò chuyện, bạn thấy một loạt văn bản trong terminal kết thúc bằng dòng này:
CUDA out of memory. Tried to allocate [X] MiB (GPU 0; [Y] GiB total capacity; [Z] MiB already allocated; [W] MiB free; ...)
Tại sao GPU của bạn đang "kêu cứu"
Ollama cố gắng nén toàn bộ Mô hình Ngôn ngữ Lớn (LLM) vào Video RAM (VRAM) của GPU để mang lại cho bạn phản hồi nhanh, gần như tức thì. Nếu các tệp mô hình cộng với "không gian não bộ" cần thiết cho cuộc hội thoại (context window) vượt quá VRAM hiện có, driver CUDA sẽ đơn giản là bỏ cuộc. Đây là một điểm nghẽn phổ biến khi cố gắng chạy mô hình 70B trên card 8GB, hoặc khi trình duyệt của bạn đang chiếm dụng tài nguyên GPU.
Bước 1: Xác định các ứng dụng ngốn tài nguyên VRAM
Trước khi bắt đầu tinh chỉnh Ollama, hãy xem thứ gì khác đang ngốn bộ nhớ của bạn. Mở terminal và chạy:
nvidia-smi
Kiểm tra bảng "Processes" ở phía dưới. Các trình duyệt hiện đại như Chrome hoặc Edge thường sử dụng từ 500MB đến 1.5GB VRAM chỉ để hiển thị các tab. Tương tự, các ứng dụng như Discord hoặc Slack sử dụng tính năng tăng tốc phần cứng (hardware acceleration) theo mặc định. Hãy đóng các ứng dụng nặng về bộ nhớ này và thử chạy lại mô hình của bạn để xem liệu điều đó có giải quyết được điểm nghẽn hay không.
Bước 2: Chuyển sang một bản Quantization nhẹ hơn
Các mô hình có các "trọng số" hoặc mức độ nén khác nhau được gọi là quantization. Một phiên bản 8-bit (Q8_0) tiêu chuẩn của mô hình 8B có thể yêu cầu 9GB VRAM, trong khi phiên bản 4-bit (Q4_K_M) chỉ cần khoảng 5.5GB. Ollama tải các mô hình 4-bit theo mặc định, nhưng bạn có thể chọn mức thấp hơn nữa nếu thực sự cần tiết kiệm không gian.
Thử tải một phiên bản nén cao của mô hình:
# Thử bản quantization 2-bit để tiết kiệm bộ nhớ tối đa
ollama run llama3:8b-instruct-q2_K
Mặc dù mô hình Q2 hoặc Q3 sử dụng ít VRAM hơn đáng kể, hãy lưu ý rằng AI có thể dễ mắc lỗi hoặc "ảo tưởng" (hallucinations) hơn do bị nén quá mạnh.
Bước 3: Thu nhỏ Context Window
Context window là lượng văn bản mà mô hình có thể "nhớ" trong một cuộc hội thoại. Theo mặc định, Ollama thường cấp phát đủ VRAM cho 2048 hoặc 4096 token. Trên một số mô hình như Llama 3, việc tăng con số này lên 8192 token có thể ngốn thêm 1-2GB VRAM. Giảm giới hạn này là cách nhanh nhất để ngăn lỗi OOM mà không cần thay đổi chính mô hình đó.
Tạo một Modelfile tùy chỉnh để giới hạn mức sử dụng bộ nhớ:
- Tạo một tệp có tên là
config.Modelfile:
FROM llama3
PARAMETER num_ctx 1024
- Xây dựng biến thể mô hình đã tối ưu hóa của bạn:
ollama create llama3-low-vram -f config.Modelfile
- Chạy phiên bản mới của bạn:
ollama run llama3-low-vram
Bước 4: Buộc Ollama giải phóng bộ nhớ
Ollama giữ các mô hình được tải trong VRAM của bạn trong 5 phút sau lần truy vấn cuối cùng. Điều này giúp các cuộc trò chuyện tiếp theo bắt đầu ngay lập tức, nhưng nó ngăn các ứng dụng khác sử dụng GPU. Nếu bạn thường xuyên chuyển đổi giữa các mô hình, bạn nên yêu cầu Ollama giải phóng GPU ngay lập tức hoặc giới hạn số lượng mô hình mà nó lưu giữ cùng lúc.
Trên Linux:
Sửa đổi cấu hình dịch vụ systemd:
sudo systemctl edit ollama.service
Chèn các biến môi trường này vào dưới khối [Service]:
Environment="OLLAMA_MAX_LOADED_MODELS=1"
Environment="OLLAMA_NUM_PARALLEL=1"
Environment="OLLAMA_KEEP_ALIVE=0"
Áp dụng các thay đổi và khởi động lại dịch vụ:
sudo systemctl daemon-reload
sudo systemctl restart ollama
Trên Windows:
- Tìm kiếm "Edit the system environment variables" trong menu Start.
- Nhấp vào "Environment Variables" và nhìn dưới mục "User variables."
- Thêm một biến mới (New variable):
OLLAMA_MAX_LOADED_MODELSvới giá trị là1. - Nhấp chuột phải vào biểu tượng Ollama ở khay hệ thống và chọn "Quit," sau đó khởi chạy lại nó.
Bước 5: Đẩy các Layer ra ngoài một cách thủ công
Nếu mô hình của bạn chỉ lớn hơn GPU vài megabyte, Ollama thường sẽ cố gắng chia sẻ khối lượng công việc giữa GPU và CPU. Nếu quá trình tự động này thất bại, bạn có thể kiểm soát thủ công số lượng layer mô hình được đưa vào GPU. Điều này giúp giữ phần lớn công việc trên card đồ họa trong khi đẩy phần dư thừa sang RAM hệ thống.
Cập nhật Modelfile của bạn với tham số num_gpu:
FROM llama3
# Thử chỉ gửi 20 layer tới GPU thay vì toàn bộ mô hình
PARAMETER num_gpu 20
Bắt đầu với một con số thấp và tăng dần lên. Đó là một sự cân bằng: nhiều layer GPU hơn nghĩa là tốc độ nhanh hơn, nhưng ít layer hơn giúp ngăn chặn lỗi treo OOM.
Cách xác minh bản sửa lỗi
Đừng chỉ đoán xem nó có hoạt động hay không. Hãy làm theo các bước sau để xem mức sử dụng bộ nhớ của bạn trong thời gian thực:
- Giải phóng bộ nhớ bằng cách chạy
ollama stop [tên-mô-hình]. - Mở một cửa sổ terminal mới và chạy
watch -n 1 nvidia-smi. - Trong terminal ban đầu của bạn, hãy khởi động mô hình:
ollama run llama3. - Quan sát cột Memory-Usage. Nếu nó ở mức an toàn dưới tổng dung lượng GPU của bạn (ví dụ: đã sử dụng 7200MB trên 8192MB), bạn đã tối ưu hóa thành công thiết lập của mình.
Mẹo chuyên nghiệp để quản lý VRAM tốt hơn
- Cập nhật Driver: Đảm bảo bạn đang sử dụng NVIDIA Driver phiên bản 535 trở lên. Các driver mới hơn xử lý việc phân trang bộ nhớ (memory paging) mượt mà hơn.
- Biết giới hạn của bạn: Nếu bạn có 8GB VRAM, hãy gắn bó với các mô hình 7B hoặc 8B. Đối với các mô hình 14B, bạn thực sự cần 12GB+ VRAM (như RTX 3060 12GB) để chạy chúng một cách thoải mái.
- Tắt các tiến trình rác: Đôi khi Ollama không tắt sạch hoàn toàn. Sử dụng
pkill ollamatrên Linux hoặc kết thúc tiến trìnhollama.exetrong Task Manager để bắt đầu với một GPU hoàn toàn trống.

