Máy Tính

Chạy Ollama trên Proxmox LXC với GPU AMD: Hướng dẫn Tối ưu Hiệu suất

Giao diện quản lý Proxmox VE trên homelab, truy cập từ laptop

Việc xây dựng một máy chủ tại nhà (homelab) mới dựa trên Proxmox đã trở thành một ưu tiên hàng đầu, nhằm thay thế hệ thống server cũ kỹ và tối ưu hóa các dịch vụ cốt lõi. Trong quá trình chuyển đổi này, một trong những mục tiêu quan trọng là tích hợp Ollama – một nền tảng mạnh mẽ để chạy các mô hình ngôn ngữ lớn (LLM) cục bộ – và tận dụng tối đa sức mạnh của card đồ họa AMD Radeon RX 7900 XTX với 24GB VRAM. Dung lượng VRAM ấn tượng này là điều kiện lý tưởng để xử lý các mô hình AI phức tạp, đòi hỏi nhiều tài nguyên.

Khi cân nhắc cách triển khai Ollama, có hai lựa chọn chính: sử dụng máy ảo (VM) hoặc Linux Container (LXC). Mặc dù VM cung cấp sự cô lập hoàn toàn và độ ổn định cao, nó lại yêu cầu quyền kiểm soát độc quyền đối với GPU, hạn chế khả năng sử dụng card đồ họa cho các tác vụ khác. Ngược lại, việc chạy Ollama trong môi trường LXC hứa hẹn khả năng chia sẻ GPU linh hoạt hơn, mở ra cơ hội cho các ứng dụng khác như Jellyfin hay Frigate cùng sử dụng tài nguyên này. Bài viết này sẽ đi sâu vào cách thiết lập Ollama một cách hiệu quả trong Proxmox LXC, tận dụng tối đa GPU AMD để đạt được hiệu suất gần như native, một giải pháp vượt trội cho những ai muốn tối ưu hóa homelab của mình.

VM và LXC: Khác biệt và lựa chọn tối ưu cho Ollama

Hiểu rõ sự khác biệt giữa VM và LXC

Để có cái nhìn toàn diện về lý do tại sao LXC là lựa chọn ưu việt trong trường hợp này, chúng ta cần hiểu rõ sự khác biệt cơ bản giữa máy ảo (VM) và Linux Container (LXC). Mặc dù cả hai đều cung cấp môi trường ảo hóa, cách thức hoạt động và những lợi ích mà chúng mang lại lại khác nhau đáng kể.

Máy ảo (VM):
Các máy ảo hoạt động bằng cách chạy một hệ điều hành khách (guest OS) hoàn chỉnh, bao gồm cả kernel riêng của nó, trên một hypervisor như KVM trong Proxmox. Nhờ các công nghệ ảo hóa phần cứng như Intel VT-x hoặc AMD-V, cùng với trình điều khiển ảo hóa (paravirtual drivers), mức hao phí tài nguyên (overhead) là tương đối thấp nhưng vẫn cao hơn so với container. Bạn sẽ phân bổ riêng các vCPU và RAM, đồng thời mô phỏng hầu hết các thiết bị (hoặc chuyển tiếp chúng, như với GPU). VM cho phép bạn chạy Windows 11, BSD hay thậm chí macOS. Do kernel khách được cô lập hoàn toàn, một lỗi bên trong VM rất khó có thể ảnh hưởng đến hệ thống host. Đặc biệt, việc sử dụng VM làm hệ thống làm việc hàng ngày trên Proxmox là khá phổ biến, bằng cách chuyển tiếp GPU trực tiếp tới máy ảo, sau đó cắm cáp DisplayPort hoặc HDMI vào GPU và sử dụng như một hệ thống vật lý.

Linux Container (LXC/LXD):
Ngược lại, Linux Container chỉ ảo hóa không gian người dùng. Tất cả các container trên cùng một máy chủ chia sẻ chung một kernel Linux nhưng có thể sử dụng các bản phân phối không gian người dùng khác nhau. Việc khởi động gần như tức thời, mức hao phí bộ nhớ là tối thiểu và các thiết bị có thể được bind-mount hoặc chuyển tiếp ở cấp độ hệ thống tệp. Bảo mật dựa trên các namespace kernel, cgroup và tốt nhất là ID không đặc quyền. Tuy nhiên, một nhược điểm lớn là một lỗ hổng bảo mật cấp kernel có thể ảnh hưởng đến hệ thống host. Container lý tưởng khi bạn cần mật độ cao và khả năng mở rộng nhanh chóng, nhưng hãy chọn VM khi bạn cần chạy một hệ điều hành không phải Linux, thử nghiệm với các kernel khác nhau hoặc yêu cầu sự tách biệt hoàn toàn giữa host và phần mềm chạy trong môi trường ảo hóa.

Giao diện quản lý Proxmox VE trên homelab, truy cập từ laptopGiao diện quản lý Proxmox VE trên homelab, truy cập từ laptop

Trong bối cảnh chạy Ollama, việc lựa chọn LXC thay vì VM mang lại lợi thế đáng kể. Với LXC, GPU có thể được chia sẻ linh hoạt giữa nhiều container, giúp giải phóng tài nguyên quý giá này để sử dụng cho các ứng dụng khác như Jellyfin hay Frigate. Điều này tạo nên một hệ thống linh hoạt và hiệu quả hơn, đảm bảo Ollama hoạt động với hiệu suất cao mà không làm gián đoạn các dịch vụ khác trong homelab.

Cài đặt Ollama và cấu hình GPU Passthrough trong LXC

Cài đặt Ollama trong Proxmox LXC ban đầu

Để bắt đầu với Ollama, cách dễ nhất là sử dụng Proxmox Helper Script. Hãy dán lệnh sau vào shell của Proxmox:

bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/ollama.sh)"

Script này sẽ tự động tạo một container, tải xuống phiên bản Ollama mới nhất từ GitHub, giải nén và khởi chạy nó như một dịch vụ hệ thống. Chúng tôi đặc biệt khuyến nghị bạn nên xem qua mã nguồn trước khi chạy script để hiểu rõ các chức năng mà nó thực hiện, bao gồm việc gọi các hàm hỗ trợ như build.funccreate_lxc.sh.

Nếu mọi việc diễn ra suôn sẻ, bạn sẽ thấy kết quả tương tự như hình minh họa. Chúng tôi đã bật VAAPI (Video Acceleration API), cho phép LXC truy cập các thiết bị sau nếu chúng tồn tại:

  • /dev/dri/renderD128
  • /dev/dri/card0
  • /dev/dri/fb0

Quá trình cài đặt Ollama tự động trong Linux Container trên Proxmox thông qua scriptQuá trình cài đặt Ollama tự động trong Linux Container trên Proxmox thông qua script

Tuy nhiên, VAAPI chưa đủ để Ollama hoạt động hiệu quả với card RX 7900 XTX của tôi. Mặc dù card đồ họa đã được nhận diện trong VM, Ollama vẫn không thể sử dụng nó và mặc định chuyển sang chế độ tạo ra bằng CPU và RAM hệ thống, vốn chậm hơn rất nhiều so với GPU. Để Ollama có quyền truy cập đầy đủ vào GPU, chúng ta cần thực hiện thêm các bước cấu hình.

Kiểm tra và cấu hình quyền truy cập GPU cho Ollama

Trước tiên, hãy chạy lệnh sau trong shell của Proxmox để kiểm tra các thiết bị của bạn:

ls -l /dev/dri

Với cấu hình của tôi, kết quả sẽ tương tự như sau:

root@pve3:~# ls -l /dev/dri
total 0
drwxr-xr-x 2 root root 80 Jul 13 23:08 by-path
crw-rw---- 1 root video 226, 0 Jul 13 23:08 card0
crw-rw---- 1 root render 226, 128 Jul 13 23:08 renderD128

Nếu bạn thấy cả card0renderD128, bạn có thể tiếp tục.

Tiếp theo, hãy tắt container Ollama của bạn. Sau đó, vào phần Resources của container và kiểm tra xem /dev/dri/card0/dev/renderD128 đã được chuyển tiếp chưa. Nếu có, hãy nhấp vào từng mục, chọn Edit, đánh dấu vào Advanced ở phía dưới, và thay đổi Mode thành 0666. Điều này sẽ cấp quyền đọc và ghi đầy đủ cho tất cả người dùng trong container.

Sau đó, vẫn trong phần Resources, nhấp vào Add, chọn Device passthrough, và nhập /dev/kfd với chế độ 0666. Đây là giao diện tính toán cần thiết cho ROCm, cho phép container của chúng ta sử dụng GPU cho các tác vụ tính toán khi chạy các mô hình LLM cục bộ. Cuối cùng, bạn cũng cần cấp thêm dung lượng lưu trữ cho container Ollama để tải xuống các mô hình và cài đặt ROCm.

Cấu hình quyền truy cập và chuyển tiếp thiết bị GPU AMD (/dev/dri, /dev/kfd) cho container Ollama trên Proxmox LXCCấu hình quyền truy cập và chuyển tiếp thiết bị GPU AMD (/dev/dri, /dev/kfd) cho container Ollama trên Proxmox LXC

Cài đặt mở rộng ROCm và driver AMD cho Ollama

Bây giờ, hãy khởi động lại container Ollama của bạn. Tiếp theo, chúng ta sẽ cài đặt các tiện ích mở rộng AMD cho Ollama và chính ROCm. Chạy các lệnh sau trong container Ollama:

curl -L https://ollama.com/download/ollama-linux-amd64-rocm.tgz -o ollama-linux-amd64-rocm.tgz
sudo tar -C /usr -xzf ollama-linux-amd64-rocm.tgz

Các lệnh cài đặt tiện ích mở rộng ROCm cho Ollama trong môi trường Proxmox LXCCác lệnh cài đặt tiện ích mở rộng ROCm cho Ollama trong môi trường Proxmox LXC

Các lệnh này tải xuống hỗ trợ ROCm cho Ollama và đặt các tệp vào đúng vị trí. Cuối cùng, chúng ta sẽ chuẩn bị cài đặt các driver AMD mới nhất. Hãy kiểm tra hướng dẫn cài đặt driver chính thức để biết phiên bản mới nhất, nhưng đây là những gì tôi đã thực hiện:

wget https://repo.radeon.com/amdgpu-install/6.4.1/ubuntu/noble/amdgpu-install_6.4.60401-1_all.deb
sudo apt install ./amdgpu-install_6.4.60401-1_all.deb
sudo apt update

Tiến trình tải xuống và cài đặt driver AMD GPU trong container Ollama trên ProxmoxTiến trình tải xuống và cài đặt driver AMD GPU trong container Ollama trên Proxmox

Cuối cùng, chúng ta cài đặt driver AMD GPU dành riêng cho ROCm:

amdgpu-install --usecase=rocm

Hoàn tất cài đặt driver AMDGPU với tùy chọn ROCm cho container Proxmox LXCHoàn tất cài đặt driver AMDGPU với tùy chọn ROCm cho container Proxmox LXC

Khởi động lại container của bạn, và mọi thứ sẽ hoạt động!

Hiệu suất Ollama ấn tượng trên GPU AMD

Thành thật mà nói, tôi đã khá hoài nghi về hiệu suất của RX 7900 XTX, đặc biệt khi nhiều người thường đề cao CUDA như một thế mạnh của GPU Nvidia trong các tác vụ LLM. Mặc dù tôi tin rằng RTX 4090 có thể đạt hiệu suất cao hơn, nhưng RX 7900 XTX vẫn tạo ra phản hồi rất nhanh chóng. Dung lượng 24GB VRAM của nó là vô cùng tuyệt vời cho các mô hình 27B như Gemini 27B IT QAT.

Hệ thống này hoạt động hoàn hảo thông qua giao diện web UI (Open Web UI), và tôi cũng có thể gọi API của Ollama từ các ứng dụng khác như Blinko hoặc Home Assistant để tạo văn bản cục bộ. Điều tuyệt vời hơn nữa là mô hình Gemini 27B IT QAT còn vượt trội hơn mô hình Llama 3 70B trong nhiều tiêu chuẩn benchmark khác nhau. Hơn thế, nó còn là mô hình đa phương thức, có nghĩa là nó có thể tiếp nhận cả đầu vào văn bản và hình ảnh, cho phép bạn sử dụng nó như một phần của quy trình xử lý hình ảnh cục bộ từ camera, chẳng hạn. Đây thực sự là một công cụ mạnh mẽ, và tôi đang trong quá trình tích hợp nó vào pipeline xử lý của Frigate.

Giao diện người dùng Open Web UI hiển thị Ollama đang hoạt động, sử dụng GPU AMD trên ProxmoxGiao diện người dùng Open Web UI hiển thị Ollama đang hoạt động, sử dụng GPU AMD trên Proxmox

Kết luận

Việc triển khai Ollama trên Proxmox LXC với GPU AMD Radeon RX 7900 XTX không chỉ khả thi mà còn mang lại hiệu suất vượt trội, giải quyết bài toán tối ưu tài nguyên một cách hiệu quả. Thay vì phải “hy sinh” GPU cho một máy ảo độc quyền, phương pháp sử dụng LXC cho phép chia sẻ linh hoạt, đảm bảo Ollama hoạt động với tốc độ gần như native mà vẫn giữ được khả năng sử dụng GPU cho các tác vụ khác trong homelab.

Những bước hướng dẫn chi tiết về cấu hình quyền truy cập, cài đặt ROCm và driver AMD đã chứng minh rằng GPU AMD hoàn toàn có thể cạnh tranh mạnh mẽ trong lĩnh vực xử lý mô hình ngôn ngữ lớn, cung cấp một giải pháp mạnh mẽ và tiết kiệm chi phí. Với 24GB VRAM, các mô hình phức tạp như Gemini 27B IT QAT có thể chạy mượt mà, mở ra nhiều tiềm năng ứng dụng từ tự động hóa nhà thông minh đến xử lý hình ảnh AI. Chúng tôi hy vọng bài viết này đã cung cấp thông tin hữu ích. Bạn có bất kỳ câu hỏi hoặc kinh nghiệm nào muốn chia sẻ không? Hãy để lại bình luận bên dưới và đừng quên khám phá thêm các bài viết khác về Proxmox và AI trên blogcongnghe.net!

Related posts

Special K: Công Cụ “Swiss Army Knife” Nâng Tầm Trải Nghiệm Game PC Của Bạn

Administrator

10 Sai Lầm Phổ Biến Cần Tránh Khi Thiết Lập Mạng Home Lab

Administrator

5 Bài Học Quan Trọng Tôi Ước Mình Đã Biết Sớm Hơn Khi Bắt Đầu Dùng Docker Cho Dự Án Cá Nhân

Administrator