Gần đây, tôi đã thực hiện một số nâng cấp cho hệ thống server tại nhà của mình, với mục tiêu cuối cùng là thay thế hầu hết các linh kiện để đạt được hiệu suất cao hơn đáng kể, đồng thời vẫn duy trì mức tiêu thụ điện năng thấp khi không tải. Trong khi vẫn sử dụng chiếc GTX 1070 Ti đáng tin cậy đã khá lâu, tôi cũng có sẵn cả Intel Arc A770 và AMD Radeon RX 7900 XTX để thử nghiệm. Với sự tò mò về hiệu năng của Intel Arc, tôi đã quyết định lắp A770 vào máy chủ TrueNAS của mình và sử dụng trong khoảng một tuần.
Thành thật mà nói, không có quá nhiều sự thay đổi lớn. Dung lượng VRAM 16GB của A770 là một điểm cộng đáng giá, và đây có lẽ là cải thiện “tốt nhất” mà tôi nhận thấy. Ngoài ra, tôi đang chuyển sang sử dụng các mô hình LLM lớn hơn cần nhiều VRAM hơn, và việc tìm cách khắc phục 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 cũng là một thách thức.
Quá trình chuyển đổi: Những trở ngại bất ngờ
Các ứng dụng của tôi đã bị “bối rối”
Khi TrueNAS được cấu hình ban đầu với GPU Nvidia, một điều thú vị xảy ra sau khi chuyển sang một loại card khác. TrueNAS sử dụng môi trường chạy Nvidia Docker mặc định cho một số ứng dụng khi các driver được kích hoạt trên một máy tương thích, điều này được định nghĩa trong tệp docker-compose
mẫu của mỗi ứng dụng. Tuy nhiên, tệp này không được cập nhật khi khởi động, dẫn đến việc nhiều container đơn giản là bị lỗi. Tôi đoán rằng vấn đề này liên quan đến môi trường chạy Nvidia Docker (vì trước đây 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 tệp /var/log/app_lifecycle.log
, rõ ràng môi trường chạy chính là nguyên nhân:
stderr: Auto-detected mode as ‘legacy’nnvidia-container-cli: initialization error: nvml error: driver not loaded: unknown
Các container bị lỗi hiển thị trên giao diện TrueNAS sau khi chuyển sang dùng GPU Intel Arc A770, minh họa vấn đề tương thích runtime Docker.
Tương tự, tất cả các ứng dụng của tôi được triển khai trong Dockge đều dường như sử dụng môi trường chạy Nvidia mặc định, 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 của tôi trong Dockge, tôi chỉ cần thêm cờ "runtime: runc"
vào tệp compose của từng ứng dụng. Tuy nhiên, không có cách dễ dàng để 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 tệp docker-compose
cho từng ứng dụng, nhưng tôi đã phát hiện ra một phương pháp dễ dàng hơn nhiều: bằng cách cập nhật chính ứng dụng đó trong TrueNAS, nó đã loại bỏ môi trường chạy Nvidia và có thể khởi động bình thường.
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. Tuy nhiên, 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 là đã quen thuộc với môi trường chạy Nvidia 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ó thể đã chỉ cho tôi đúng hướng, nhưng kinh nghiệm trước đây đã giúp tôi hiểu và khắc phục sự cố chỉ trong vòng chưa đầy năm phút.
Di chuyển phần còn lại diễn ra khá suôn sẻ
Cấu hình chuyển đổi GPU không phải Nvidia trên TrueNAS để sử dụng Intel Arc A770.
Nhìn chung, quá trình chuyển đổi đã diễn ra khá suôn sẻ. Không có nhiều thay đổi lớn, điều này làm tôi khá ngạc nhiên. Việc cập nhật Jellyfin để sử dụng GPU Intel rất đơn giản từ giao diện người dùng TrueNAS, chỉ cần chọn tùy chọn “Passthrough available (non-NVIDIA) GPUs” trong cài đặt ứng dụng.
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, và 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 hợp 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 để làm cho nó hoạt động như trước đây.
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 chỉ cần thay đổi khả năng tăng tốc phần cứng sang Intel QuickSync, thay đổi thiết bị thành /dev/dri/renderD128
(thông tin này cũng được ghi rõ 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 nội dung trên Jellyfin từ trình duyệt web của mình. Có vẻ như có một lỗi trong driver GPU Intel Arc khiến trình duyệt của tôi dừng phát lại sau vài giây với lỗi phát lại nghiêm trọng. Transcoding vẫn hoạt động tốt trên điện thoại, TV và laptop của tôi, vậy điều gì đã xảy ra? Hóa ra, nó thậm chí còn hoạt động trong ứng dụng khách Jellyfin. Gợi ý tốt nhất mà tôi có thể tìm thấy là nó liên quan đến việc ánh xạ tông màu HDR (HDR tone mapping), nhưng tôi chưa có thời gian để kiểm tra bản sửa lỗi. Dù sao, ứ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à LLM: Lý do chính cho sự thay đổi
Cải thiện đáng kể hiệu suất LLM
GPU GTX 1070 Ti của tôi đã hoạt động khá tốt cho hầu hết mọi tác vụ. 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 thực sự sử dụng GPU. Nhược điểm duy nhất, nếu tôi có thể gọi đó là nhược điểm, là dung lượng VRAM hạn chế. GTX 1070 Ti chỉ có 8GB VRAM, trong khi Intel Arc A770 có tới 16GB. Tôi đã sử dụng server tại nhà để chạy các mô hình LLM cục bộ một thời gian, phục vụ 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 giọng nói, v.v. Ngoài ra, tôi còn sử dụng một mô hình nhúng (embedding model) với Blinko, khiến VRAM bị sử dụng rất sát giới hạn.
Intel Arc A770, với 16GB VRAM, cho phép tôi chạy các mô hình lớn gấp đôi hoặc với ngữ cảnh (context) lớn hơn đáng kể. Mặc dù không phải là “cắm và chạy” như trên card Nvidia, nó vẫn đòi hỏi một chút tinh chỉnh để hoạt động. Ollama bản thân không hỗ trợ GPU Intel Arc, mặc dù llama.cpp
(mà Ollama về cơ bản là một lớp bọc và cung cấp các điểm cuối 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 tệp Docker Compose sau đây trong Dockge. 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 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: {}
Hiệu suất thực tế ấn tượng
Giao diện Open Web UI và Ollama đang chạy trên GPU Intel Arc A770, minh họa khả năng xử lý LLM.
Với cấu hình này, bạn có thể triển khai và chạy 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à nó 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 đầu ra của lệnh “sycl-ls” trong shell của container trông giống như trên, thì bạn đã sẵn sàng.
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 sẽ mong đợi điều gì, 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 ra cũng nhanh hơn rất nhiều. Với Qwen 3 14B, một lời nhắc 18 token được nhập với tốc độ 63.73 token mỗi giây, và phản hồi được tạo ra 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 chữ số mà tôi thấy với các mô hình tương đương khi sử dụng 1070 Ti.
Tuy nhiên, không phải mọi thứ đều hoàn hảo
Tiêu thụ điện năng cao hơn đáng kể
Hình ảnh cận cảnh GPU Intel Arc A770, một linh kiện quan trọng trong hệ thống server tại nhà.
Tuy nhiên, có một nhược điểm lớn đối với nâng cấp này, đó là mức tiêu thụ điện năng. Intel Arc A770 chạy nóng và sử dụng nhiều năng lượng, ngay cả khi ở chế độ chờ. Trong khi GTX 1070 Ti có thể ở chế độ chờ chỉ với 9W, card Intel này tiêu thụ khoảng 30-40W khi không tải. Mặc dù khả năng của nó vượt trội hơn 1070 Ti ở nhiều khía cạnh, tôi không chắc chắn liệu chi phí tăng thêm 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à sử dụng thêm 0.20 euro mỗi ngày khi ở chế độ chờ. Con số này tăng lên đáng kể khi hoạt động dưới tải, và vì tôi sẽ sử dụng nó thường xuyên hơn 1070 Ti, nên 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. Đó là thêm 60 euro tiền điện mỗi hai tháng.
Ngược lại, có rất nhiều API LLM có sẵn trên thị trường với chi phí cực kỳ thấp, 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 có giải mã AV1, nhưng liệu nó có thực sự đáng giá không? Tôi sẽ sớm thử nghiệm AMD Radeon 7900 XTX vì dung lượng VRAM còn lớn hơ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 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 RX 7900 XTX của họ ở chế độ chờ trên 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ó ở mức thấp hơn trong phạm vi đó.
Dù sao, Arc A770 vẫn là một card tuyệt vời cho TrueNAS nói chung. Tôi thực sự ấn tượng với nó, và mặc dù ban đầu tôi có 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ã Jellyfin không còn hoạt động (điều 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 một số lỗi liên quan đến các ứng dụng sử dụng môi trường chạy Nvidia cũ, nhưng đó là vấn đề của TrueNAS, không phải của Intel. Đối với một 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 săn đón nhiều như vậy, tôi đã mong đợi điều tồi tệ hơn nhiều.
Bạn nghĩ sao về khả năng của Intel Arc A770 cho các tác vụ server tại nhà? Hãy chia sẻ kinh nghiệm và ý kiến của bạn trong phần bình luận bên dưới!