Gần đây, tôi đã thực hiện một số nâng cấp cho hệ thống máy chủ gia đình (home server) của mình với mục tiêu dần thay thế hầu hết các linh kiện bằng những thành phần mạnh mẽ hơn, nhưng vẫn đảm bảo mức tiêu thụ điện năng ở chế độ chờ (idle power) thấp. Trong khi chiếc GTX 1070 Ti đáng tin cậy đã phục vụ tôi khá lâu, tôi cũng có trong tay cả Intel Arc A770 và AMD Radeon RX 7900 XTX để thử nghiệm. Với sự tò mò về hiệu suất của Intel Arc, tôi đã lắp A770 vào máy TrueNAS của mình được khoảng một tuần.
Thực tế, không có quá nhiều thay đổi lớn. Dung lượng VRAM 16GB là một điểm cộng đáng kể, và đây cũng là cải tiến “tốt nhất” mà tôi nhận thấy. Ngoài ra, tôi đang tìm cách chạy các mô hình ngôn ngữ lớn (LLM) cần nhiều VRAM hơn, và giải quyết các vấn đề phát sinh khi các ứng dụng tìm kiếm môi trường chạy của Nvidia nhưng lại gặp phải GPU Arc.
Quá Trình Chuyển Đổi: Đầy Thử Thách Ban Đầu, Nhưng Khả Thi
Các Ứng Dụng Docker “Bối Rối” Với GPU Mới
Khi được cấu hình ban đầu với GPU Nvidia, TrueNAS (tìm hiểu thêm về các ứng dụng tốt nhất cho TrueNAS Scale) có một điểm khá thú vị sau khi chuyển đổi sang một thương hiệu card khác. Nó sử dụng Nvidia Docker runtime mặc định cho một số ứng dụng khi driver được bật trên một máy tương thích, điều này được định nghĩa trong file docker-compose template của mỗi ứng dụng. Tuy nhiên, file này không được cập nhật khi khởi động, dẫn đến nhiều container bị crash. Tôi đoán rằng vấn đề nằm ở Nvidia Docker runtime (vì tôi đã từng thử nghiệm nó khi triển khai các ứng dụng của riêng mình trong Dockge), và khi kiểm tra /var/log/app_lifecycle.log
, rõ ràng runtime chính là nguyên nhân:
stderr: Auto-detected mode as 'legacy'\nnvidia-container-cli: initialization error: nvml error: driver not loaded: unknown
Tương tự, tất cả các ứng dụng của tôi triển khai trong Dockge đều có vẻ mặc định sử dụng Nvidia runtime, trong khi không phải mọi ứng dụng gốc của TrueNAS đều như vậy. Đối với các ứng dụng trong Dockge, tôi có thể dễ dàng thêm cờ “runtime: runc” vào mỗi file compose của chúng. Tuy nhiên, không có cách dễ dàng nào để khắc phục điều này với các ứng dụng chạy trong giao diện người dùng TrueNAS. Mặc dù tôi có thể sửa đổi file docker-compose cho từng ứng dụng, tôi đã khám phá ra một phương pháp dễ dàng hơn nữa: bằng cách cập nhật chính ứng dụng đó trong TrueNAS, nó sẽ loại bỏ Nvidia runtime và có thể khởi động bình thường.
Lỗi ứng dụng Docker trên TrueNAS sau khi chuyển sang Intel Arc A770
Thật không may, cách khắc phục này rõ ràng phụ thuộc vào việc có bản cập nhật cho ứng dụng của bạn ngay từ đầu, nhưng nó đã giải quyết vấn đề và cho phép tôi triển khai các ứng dụng bị lỗi ngay từ lần khởi động đầu tiên. Tôi cũng may mắn vì đã quen thuộc với Nvidia runtime trên TrueNAS từ trước, nếu không, tôi đã hoàn toàn bối rối. Lỗi trong nhật ký app_lifecycle của tôi có thể đã đưa tôi đi đúng hướng, nhưng kinh nghiệm trước đó đã cho phép tôi hiểu và khắc phục sự cố trong vòng chưa đầy năm phút.
Ngoài những vấn đề trên, quá trình di chuyển nhìn chung khá suôn sẻ. Không có quá nhiều thay đổi lớn, điều này khiến tôi khá ngạc nhiên. Cập nhật Jellyfin để sử dụng GPU Intel khá đơn giản từ giao diện người dùng TrueNAS và chỉ cần chọn tùy chọn “Passthrough available (non-NVIDIA) GPUs” trong cài đặt ứng dụng.
Cấu hình chuyển tiếp GPU phi-Nvidia trên TrueNAS với Intel Arc A770
Ngay cả với Immich, tất cả những gì cần làm là chuyển từ ảnh CUDA Machine Learning sang ảnh mặc định, nhưng tôi không phải trải qua bất kỳ quá trình gỡ lỗi kéo dài nào cho bất kỳ ứng dụng nào của mình. Bất cứ thứ gì không hoạt động đều hoàn toàn có lý, và tất cả những gì tôi phải làm là cập nhật ứng dụng hoặc thay đổi ảnh được sử dụng để nó hoạt động như trước.
Ngay cả việc làm cho tính năng chuyển mã (transcoding) của Jellyfin hoạt động cũng không quá khó khăn. Tôi cần thay đổi tăng tốc phần cứng thành Intel QuickSync, thay đổi thiết bị thành /dev/dri/renderD128
(điều mà Jellyfin cũng gợi ý ngay bên dưới nếu bạn có hệ thống đa GPU), và thế là xong. Nó hoạt động ngay lập tức, và tôi có thể bật nhiều tùy chọn chuyển mã hơn trước.
Tuy nhiên, tôi sớm nhận ra một vấn đề khi cố gắng xem một nội dung nào đó trên Jellyfin từ trình duyệt web trên máy tính của mình. Có vẻ như có một lỗi trong trình điều khiển GPU Intel Arc khiến trình duyệt của tôi ngừng phát lại sau vài giây với lỗi phát lại nghiêm trọng. Chuyển mã đã hoạt động tốt trên điện thoại, TV và máy tính xách tay của tôi, vậy điều gì đang xảy ra? Hóa ra, nó thậm chí còn hoạt động trong ứng dụng Jellyfin. Gợi ý tốt nhất mà tôi có thể tìm thấy là nó liên quan đến HDR tone mapping, nhưng tôi chưa có thời gian để kiểm tra cách khắc phục. Tuy nhiên, ứng dụng Jellyfin khá tốt, nên tôi không ngại sử dụng nó trong thời gian chờ đợi.
Ollama và Sức Mạnh Của VRAM 16GB: Lý Do Thực Sự Của Nâng Cấp
Cải Thiện Đáng Kể Hiệu Năng Chạy LLM Cục Bộ
Chiếc GTX 1070 Ti của tôi đã hoạt động tốt cho hầu hết mọi thứ tôi yêu cầu. Khả năng chuyển mã tuyệt vời, mức tiêu thụ điện năng thấp và hiệu suất đủ tốt cho các tác vụ giới hạn mà tôi thực sự cần đến GPU. Điểm yếu duy nhất, nếu có thể gọi đó là điểm yếu, chính là thiếu VRAM. GTX 1070 Ti chỉ có 8GB VRAM, trong khi Intel Arc A770 có 16GB. Tôi đã sử dụng máy chủ gia đình để chạy các mô hình ngôn ngữ lớn cục bộ (local LLM) một thời gian, cung cấp năng lượng cho một số tự động hóa trong Home Assistant và tạo văn bản cho thông báo, phản hồi bằng giọng nói, v.v. Ngoài ra, tôi cũng sử dụng một mô hình nhúng (embedding model) với Blinko, vì vậy tôi thực sự đã tận dụng tối đa lượng VRAM hạn chế.
Intel Arc A770, với 16GB VRAM, có thể cho phép tôi sử dụng mô hình lớn gấp đôi hoặc ngữ cảnh (context) lớn hơn đáng kể. Tuy nhiên, nó không “cắm và chạy” dễ dàng như trên card Nvidia, và đòi hỏi một số tinh chỉnh để hoạt động. Bản thân Ollama không hỗ trợ GPU Intel Arc, mặc dù llama.cpp – thư viện mà Ollama về cơ bản bọc lại và cung cấp các endpoint cần thiết cho hầu hết người dùng – lại có. Cuối cùng, tôi đã làm cho nó hoạt động với file Docker Compose sau đây trong Dockge, mặc dù bạn sẽ cần điều chỉnh một số phần (ít nhất là các volume) nếu muốn chạy nó trên card Arc của riêng mình.
services:
ollama-intel-arc:
image: intelanalytics/ipex-llm-inference-cpp-xpu:latest
container_name: ollama-intel-arc
restart: unless-stopped
devices:
- /dev/dri:/dev/dri
volumes:
- /mnt/Storage/OllamaArc:/root/.ollama
ports:
- 11434:11434
environment:
- no_proxy=localhost,127.0.0.1
- OLLAMA_HOST=0.0.0.0
- DEVICE=Arc
- OLLAMA_INTEL_GPU=true
- OLLAMA_NUM_GPU=999
- ZES_ENABLE_SYSMAN=1
command: sh -c 'mkdir -p /llm/ollama && cd /llm/ollama && init-ollama && exec ./ollama serve'
privileged: true
shm_size: 16g
open-webui:
image: ghcr.io/open-webui/open-webui:latest
container_name: open-webui-arc
volumes:
- /mnt/Storage/OllamaArc/open-webui:/app/backend/data
depends_on:
- ollama-intel-arc
ports:
- 4040:8080
environment:
- ENABLE_OPENAI_API=False
- ENABLE_OLLAMA_API=True
extra_hosts:
- host.docker.internal:host-gateway
restart: unless-stopped
volumes:
ollama-volume: {}
open-webui-volume: {}
networks: {}
Giao diện Open Web UI và Ollama đang chạy trên Intel Arc A770
Với cấu hình này, bạn có thể triển khai và chạy mô hình LLM cục bộ của riêng mình với API tương thích OpenAI để sử dụng trong các phần mềm như Home Assistant. Tôi đã tích hợp nó và mọi thứ hoạt động hoàn hảo. Cấu hình này sử dụng ảnh ipex-llm-inference-cpp-xpu
, trong đó IPEX LLM là thư viện tăng tốc LLM cho GPU Intel. Nếu kết quả từ lệnh “sycl-ls” trong shell của container của bạn trông giống như hình trên, thì bạn đã sẵn sàng.
Ollama hoạt động trên Intel Arc A770 hiển thị sycl-ls
Thành thật mà nói, tôi thực sự ấn tượng với hiệu suất của Arc A770 cho tác vụ này. Tôi không chắc chắn hoàn toàn về những gì mong đợi, nhưng cả Qwen3:14B và Deepseek-R1-0528:14B đều hoạt động hoàn hảo. Đầu ra văn bản rõ ràng tốt hơn đáng kể so với những gì tôi đã thấy trên các mô hình nhỏ hơn nhiều, và tốc độ tạo văn bản cũng nhanh hơn rất nhiều. Với mô hình Qwen 3 14B, một lời nhắc (prompt) 18 token được nhập vào với tốc độ 63.73 token mỗi giây, và phản hồi xuất hiện với tốc độ 23.19 token mỗi giây. Tốc độ này nhanh hơn rất nhiều so với tốc độ chỉ vài token mỗi giây mà tôi thấy với các mô hình tương đương khi sử dụng GTX 1070 Ti.
Mặt Tối Của Nâng Cấp: Tiêu Thụ Điện Năng Cao Hơn Đáng Kể
Mức Tiêu Thụ Điện Năng Ở Chế Độ Chờ Gây Lo Ngại
Tuy nhiên, có một nhược điểm lớn của bản nâng cấp này, đó là mức tiêu thụ điện năng. Intel Arc A770 hoạt động khá nóng và tiêu thụ nhiều năng lượng, ngay cả khi ở chế độ chờ (idle). Trong khi GTX 1070 Ti có thể chạy ở chế độ chờ chỉ khoảng 9W, chiếc card Intel này tiêu thụ khoảng 30-40W ở chế độ chờ. Mặc dù khả năng của nó vượt xa 1070 Ti ở nhiều khía cạnh, tôi không quá chắc chắn liệu việc tăng chi phí điện năng có đáng giá chỉ để chạy các mô hình ngôn ngữ lớn hơn và nhanh hơn hay không. Chi phí năng lượng tăng thêm, theo tính toán của tôi, là thêm khoảng 0.20 Euro mỗi ngày ở chế độ chờ. Con số này tăng lên đáng kể khi hoạt động dưới tải nặng, và do tôi có thể sử dụng nó thường xuyên hơn 1070 Ti, khả năng cao hóa đơn tiền điện của tôi sẽ tăng thêm hơn một Euro mỗi ngày. Điều đó tương đương với thêm khoảng 60 Euro tiền điện cứ hai tháng.
Card đồ họa Intel Arc A770
Ngược lại, có rất nhiều API LLM có sẵn với chi phí cực kỳ rẻ, hoặc thậm chí miễn phí, với giới hạn sử dụng hàng ngày trong trường hợp của Google Gemini. Chắc chắn, tôi cũng nhận được khả năng giải mã AV1, nhưng liệu điều đó có thực sự đáng giá không? Tôi sẽ sớm thử nghiệm AMD Radeon 7900 XTX vì VRAM lớn hơn nữa của nó và để trải nghiệm ROCm, nhưng ai biết được, có thể cuối cùng tôi sẽ quay lại với GTX 1070 Ti. Tôi đã thấy nhiều người nói rằng họ đạt được mức tiêu thụ từ 15W đến 30W khi chiếc 7900 XTX của họ ở chế độ chờ trong một máy chạy Linux, điều này nghe có vẻ chấp nhận được hơn nhiều đối với tôi, đặc biệt nếu nó nằm ở mức thấp hơn của dải đó.
Nhìn chung, Arc A770 vẫn là một chiếc card tuyệt vời cho TrueNAS. Tôi thực sự ấn tượng với nó, và mặc dù tôi đã bắt đầu với kỳ vọng thấp, tôi nghĩ rằng nó sẽ gặp khó khăn khi thực hiện nhiều tác vụ mà tôi thường cần GPU. Tôi đã lo sợ rằng tính năng chuyển mã của Jellyfin sẽ không còn hoạt động (mà tôi sử dụng rất nhiều khi vắng nhà), và tôi không biết phải mong đợi điều gì khi nói đến Ollama. Tôi đã phải sửa chữa một số vấn đề liên quan đến các ứng dụng sử dụng Nvidia runtime cũ, nhưng đó là vấn đề của TrueNAS chứ không phải của Intel. Với một chiếc card có thể tìm thấy với giá rẻ hơn nhiều so với các card Nvidia tương đương, nó chắc chắn hoàn thành tốt công việc. Không có CUDA, nhưng với việc CUDA được đánh giá cao như vậy, tôi đã mong đợi điều tồi tệ hơn nhiều.