Ba hướng tự chạy LLM trên Fedora Workstation
Muốn chạy LLM mượt trên máy cá nhân hoặc workstation Fedora, anh em thường đứng trước 3 lựa chọn kiến trúc:
- Native toàn bộ (Bare-metal): Kéo binary Ollama về
/usr/local/binvà dựng Open WebUI bằngvirtualenvhoặcuv. Cách này vắt kiệt hiệu năng phần cứng nhưng dọn dẹp rất mệt. - Container hóa 100% (Podman/Docker stack): Bọc cả Ollama lẫn WebUI vào container. Cấu hình CDI (Container Device Interface) để passthrough GPU NVIDIA qua Podman rootless trên Fedora rất dễ vấp quyền truy cập
/dev/nvidia*. - Mô hình Hybrid (Khuyên dùng): Cài Ollama trực tiếp lên OS để bám thẳng vào driver CUDA. Đẩy riêng Open WebUI vào Podman container để cô lập môi trường web.
Đánh giá thực tế từng phương án
1. Bare-metal toàn phần
Ưu điểm: Tốc độ suy luận đạt đỉnh. Không có bất kỳ độ trễ nào từ namespace hay virtualization. Debug lỗi CUDA driver cực kỳ nhanh.
Điểm nghẽn: Open WebUI kéo theo hàng tá thư viện Python và Node.js. Cài thẳng vào máy rất dễ làm rác môi trường hệ thống. Khi cần nâng cấp hay gỡ bỏ, bạn sẽ mất nhiều thời gian dọn dẹp.
2. Container toàn phần
Ưu điểm: Quản lý vòng đời gọn nhẹ. Muốn xóa sạch chỉ cần hạ compose file xuống là xong.
Điểm nghẽn: Fedora bật SELinux Enforcing theo mặc định. Việc phân quyền cho container rootless truy cập driver NVIDIA thường xuyên dính lỗi permission denied, trừ khi bạn tắt SELinux hoặc viết rule tùy chỉnh.
3. Mô hình Hybrid (Ollama Native + Open WebUI Container)
Phương án này giải quyết triệt để vấn đề. Ollama bắt driver akmod-nvidia trực tiếp từ RPM Fusion, offload trọn vẹn 100% layer lên vRAM. Trong khi đó, phần giao diện WebUI phức tạp được cách ly hoàn toàn trong một container Podman duy nhất.
Tại sao workstation Fedora nên chọn mô hình Hybrid?
Sau hơn 2 năm dùng Fedora làm OS làm việc hàng ngày, mình nhận thấy kernel của bản phân phối này cập nhật rất nhanh. Mỗi lần kernel nhảy version, module NVIDIA lại được akmods build lại.
Chạy Ollama native giúp service tự bắt driver mới mà không làm gãy container runtime. Bạn vừa giữ sạch OS, vừa né được toàn bộ phiền toái khi cấu hình SELinux passthrough thiết bị.
Các bước triển khai thực tế
Bước 1: Cài đặt Driver NVIDIA từ RPM Fusion
Trước hết, kiểm tra xem máy đã nhận diện đúng card rời hay chưa:
nvidia-smi
Nếu máy mới cài hoặc đang chạy driver mã nguồn mở Nouveau, hãy kéo gói driver chính thức qua DNF:
sudo dnf install -y akmod-nvidia xorg-x11-drv-nvidia-cuda
# Chờ akmods build xong module kernel (thường mất 2-3 phút) rồi khởi động lại
sudo akmods --force
sudo reboot
Bước 2: Cài Ollama và tinh chỉnh systemd service
Tải và cài đặt Ollama bằng script chính thức:
curl -fsSL https://ollama.com/install.sh | sh
Mặc định Ollama chỉ mở cổng nội bộ 127.0.0.1:11434. Để tối ưu tốc độ và mở kết nối an toàn cho WebUI, hãy tạo file override cho systemd:
sudo systemctl edit ollama.service
Dán đoạn cấu hình tinh chỉnh sau vào giữa hai dòng chú thích:
[Service]
Environment="OLLAMA_HOST=127.0.0.1:11434"
Environment="OLLAMA_ORIGINS=*"
Environment="OLLAMA_FLASH_ATTENTION=1"
Environment="OLLAMA_KEEP_ALIVE=24h"
Ý nghĩa thực chiến của các cờ:
OLLAMA_FLASH_ATTENTION=1: Tiết kiệm khoảng 15% – 25% vRAM trên kiến trúc RTX 2000 trở lên khi xử lý context dài từ 8k – 32k tokens.OLLAMA_KEEP_ALIVE=24h: Giữ model cố định trên vRAM. Bạn sẽ không phải chờ 4 – 6 giây load lại model từ SSD NVMe sau một khoảng thời gian không chat.
Reload daemon để áp dụng thay đổi:
sudo systemctl daemon-reload
sudo systemctl restart ollama
Bước 3: Tải model và kiểm tra CUDA offloading
Kéo một model thông dụng về test. Ví dụ model qwen2.5:7b (bản Q4_K_M chiếm khoảng 4.7GB vRAM):
ollama run qwen2.5:7b
Bật một cửa sổ terminal khác và chạy lệnh nvidia-smi. Khi thấy tiến trình ollama_llama_server chiếm vRAM và GPU load nhảy lên 90% – 100% trong lúc sinh text, hệ thống đã nhận card thành công. Trên RTX 3060 12GB, tốc độ thường đạt tầm 50-65 tokens/giây.
Bước 4: Khởi chạy Open WebUI qua Podman
Fedora đi kèm Podman nên bạn không cần cài thêm Docker. Tạo một volume để giữ lại lịch sử chat khi cập nhật image:
podman volume create open-webui-data
podman run -d \
--name open-webui \
--network host \
-v open-webui-data:/app/backend/data:Z \
-e OLLAMA_BASE_URL=http://127.0.0.1:11434 \
--restart always \
ghcr.io/open-webui/open-webui:main
Hai chi tiết kỹ thuật cốt lõi cần nhớ:
- Flag
:Zở volume: Bắt buộc phải có. Cờ này yêu cầu Podman tự gán nhãn SELinux (container_file_t) cho volume, tránh hoàn toàn lỗi Permission Denied ngầm vào database SQLite. - Flag
--network host: Giúp container dùng chung network namespace với máy chủ. WebUI gọi thẳng vào127.0.0.1:11434của Ollama mà không phải cấu hình bridge network hay mở port trên firewalld.
Bước 5: Thiết lập tài khoản ban đầu
Mở trình duyệt gõ http://localhost:8080. Tài khoản đăng ký đầu tiên sẽ nhận vai trò Admin. Vào mục Settings > Models, bạn sẽ thấy toàn bộ model đã tải về sẵn sàng để sử dụng.
Mẹo thực chiến tinh chỉnh hiệu năng
- Chạy model vượt mức vRAM: Nếu dùng card 8GB vRAM (như RTX 3070/4060) nhưng muốn chạy model 14B (cần tầm 9GB vRAM), Ollama sẽ tự chia layer: một phần lên GPU, phần còn lại đẩy sang RAM hệ thống. Bạn vẫn chạy được, chấp nhận tốc độ giảm xuống còn 12-18 tokens/giây.
- Chuyển vị trí lưu model: Mặc định model nằm ở
/usr/share/ollama/.ollama/modelsthuộc phân vùng root. Nếu ổ root sắp đầy, hãy chuyển sang ổ NVMe phụ bằng cách thêm biến vào systemd:Environment="OLLAMA_MODELS=/mnt/nvme-data/ollama_models". - Chặn gửi telemetry: Muốn dữ liệu hoàn toàn riêng tư, hãy thêm hai biến sau vào lệnh chạy Podman:
-e SCARF_NO_ANALYTICS=true -e DO_NOT_TRACK=true.

