SSD Nodes Learn Hosting plans →
Hướng dẫn Matt ConnorBởi Matt Connor · Cập nhật ngày 2026-08-24

Chạy GLM trên VPS với Ollama: chọn model đúng

GLM 5.2 trên Ollama chỉ chạy cloud, không tải weights về VPS. Xem model GLM phù hợp và RAM cần cho từng quantisation trước khi thuê máy.

Bạn có thể chạy GLM 5.2 trên VPS không?

Không. Bạn nên biết lý do này trước khi thuê VPS. Tính đến ngày 18 August 2026, GLM 5.2 trong thư viện của Ollama chỉ có đúng một tag là glm-5.2:cloud. Tag :cloud chạy trên server của Ollama. Máy của bạn gửi prompt và nhận token, nên các weights không bao giờ được lưu trên disk của bạn. Model có 756 billion parameters. Bốn bit cho mỗi parameter trên tổng số 756 billion parameters tương đương khoảng 378 GB weights. Đây mới chỉ là phép tính dung lượng weights, chưa tính context, activations hoặc hệ điều hành. Không có gói VPS tiêu chuẩn nào cung cấp nhiều memory như vậy.

Model GLM có thể chạy trên server bạn thuê là glm-4.7-flash. Model này được phát hành kèm weights có thể download trong 4 tag. Đây là model mixture-of-experts, nghĩa là chỉ một phần nhỏ của network chạy cho mỗi token. Z.ai mô tả model này là 30B-A3B: tổng cộng 30 billion parameters, trong đó khoảng 3 billion được kích hoạt cho mỗi token. Vì vậy, hướng dẫn này trả lời câu hỏi bạn có thể thực hiện. Cố định một tag, chọn cấu hình máy phù hợp, đo tốc độ thực tế của bạn và giữ endpoint ở chế độ private.

Hãy xác minh tag trước khi copy bất kỳ command nào, kể cả các command trong bài này. Thư viện của Ollama có thể thay đổi mà không báo trước. Mở danh sách tag của glm-4.7-flash và xác nhận tag đó vẫn tồn tại. Nếu đã có bản GLM mới hơn kèm weights có thể chạy local, hãy ưu tiên bản đó và ghi lại tag bạn thực sự đã kiểm thử.

Nếu bạn vẫn muốn dùng chính GLM 5.2, ollama run glm-5.2:cloud hoạt động sau ollama signin và từ phía client, model này hoạt động như mọi model Ollama khác. Bạn cần hiểu rõ điều mình chấp nhận: prompt rời khỏi server của bạn. Nếu lý do bạn self-host là dữ liệu phải nằm trên máy của mình, tag :cloud không đáp ứng được yêu cầu đó.

Các tag GLM nào tồn tại và nên pin tag nào

Có 3 entry GLM chính thức cần quan tâm ở đây. glm-5.2 và glm-5.1 chỉ dùng trên cloud. glm-4.7-flash là entry local, với các tag đã publish và dung lượng download mà Ollama liệt kê cho từng tag như sau.

Chartglm-4.7-flash tags in Ollama's library, checked 2026-08-18
The data behind this chart
[
  {
    "label": "q4_K_M",
    "download_gb": 19
  },
  {
    "label": "latest",
    "download_gb": 19
  },
  {
    "label": "q8_0",
    "download_gb": 32
  },
  {
    "label": "bf16",
    "download_gb": 60
  }
]

Đây là các số liệu đã publish trên trang library, không phải kết quả đo. latest và q4_K_M đều được liệt kê với dung lượng 19 GB, nên latest hiện trỏ đến bản build Q4. Giá trị này có thể thay đổi sau bất kỳ lần republish nào. Vì vậy, không bao giờ ghi ollama pull glm-4.7-flash trần vào script hoặc Dockerfile. Hãy ghi rõ quantisation. Tag lớn nhất, bf16, là bản download 60 GB chứa các weight bfloat16 chưa quantize.

Tìm kiếm trên library cũng trả về các bản upload có namespace và dấu gạch chéo trong tên, chẳng hạn someuser/glm-5.2. Dấu gạch chéo cho biết bản đó do một user account publish, nên đây là bản re-upload của cộng đồng chứ không phải entry chính thức. Không ai đảm bảo bên trong có những weight nào. Hãy xem bản đó như một binary chưa được ký mà bạn tìm thấy trên Internet.

Cài Ollama và pull đúng tag

Trình cài đặt Ollama trên Linux chỉ cần chạy một command.

curl -fsSL https://ollama.com/install.sh | sh
ollama --version

Trình cài đặt tạo một systemd service chạy bằng user ollama. Xác nhận service đã khởi động trước khi pull bất kỳ nội dung nào.

systemctl status ollama --no-pager

Active: active (running) nghĩa là API đang listen trên port 11434. Nếu unit không tồn tại, trình cài đặt đã chuyển sang cài binary thuần, và tài liệu Ollama cho Linux có service file để bạn tự tạo.

Trang glm-4.7-flash liệt kê phiên bản Ollama tối thiểu. Binary cũ không chạy model chậm hơn; nó từ chối model: lệnh pull fail với thông báo model yêu cầu phiên bản Ollama mới hơn. Chạy lại install script để nâng cấp. Tính đến ngày 18 August 2026, bản release hiện tại là 0.32.14, cao hơn nhiều so với mức tối thiểu đó.

Bây giờ pull một tag theo tên.

ollama pull glm-4.7-flash:q4_K_M
ollama ls

ollama ls phải liệt kê glm-4.7-flash:q4_K_M với kích thước gần 19 GB như đã công bố. Nếu pull fail giữa chừng thì không có gì có thể chạy được, vì vậy hãy chạy lại chính command đó. Nguyên nhân phổ biến nhất khiến pull fail trên plan nhỏ là disk đầy, không phải lỗi mạng, vì model được ghi vào /usr/share/ollama/.ollama/models trên root filesystem. Kiểm tra bằng df -h /usr/share/ollama trước khi bắt đầu.

Mỗi loại quantisation cần bao nhiêu RAM?

Hãy lấy kích thước tải xuống làm mức tối thiểu, rồi cộng thêm. Weights phải nằm trong memory. Phía trên chúng là KV cache (key/value cache), tức phần memory runtime dùng để ghi nhớ các token đã có trong cuộc hội thoại, cùng với các buffer tính toán và phần memory hệ điều hành đang sử dụng. Một máy có đúng 19 GB RAM sẽ không chạy được tag 19 GB.

Không có một hệ số nhân duy nhất phù hợp cho mọi trường hợp, vì KV cache tăng theo context length bạn cho phép, còn phần còn lại thay đổi giữa các phiên bản runtime. Vì vậy, hãy đo thay vì đoán. Load model bằng một prompt đơn giản, rồi xem server đã reserve bao nhiêu memory.

ollama run glm-4.7-flash:q4_K_M "Reply with the single word: ready"
ollama ps

ollama ps in model đã load với một cột SIZE và một cột PROCESSOR. SIZE là phần runtime thực sự đã reserve, và đó là con số cần so với kế hoạch của bạn. PROCESSOR cho biết tác vụ được thực hiện ở đâu, vì vậy 100% CPU có nghĩa là hoàn toàn không dùng GPU.

Khi model không đủ chỗ, lỗi xảy ra âm thầm và có 2 dạng. Khi bật swap, quá trình load có vẻ thành công nhưng generation trở nên cực kỳ chậm, vì các page bị chuyển qua lại giữa disk và RAM cho từng token. Khi không có swap, process bị kill ngay, và journalctl -k | grep -i "out of memory" hiển thị dòng Out of memory: Killed process của kernel, trong đó nêu tên ollama. Hãy kiểm tra cả hai, vì không thông báo nào in ra thông tin hữu ích trong terminal nơi bạn đang nhập lệnh.

Chuyển từ tag Q4 19 GB sang tag Q8 32 GB là yếu tố chính bạn có thể điều chỉnh để kiểm soát con số này. Q4 làm giảm một phần chất lượng output, và mức giảm phụ thuộc vào tác vụ; output có cấu trúc và các chuỗi suy luận dài bị ảnh hưởng nhiều hơn chat thông thường. Q4, Q8 và FP16 khác nhau như thế nào trong thực tế đáng đọc trước khi bạn quyết định, vì trên VPS chỉ dùng CPU, lựa chọn quantisation thường quyết định model có chạy được hay không.

Điều gì xảy ra trên VPS chỉ có CPU

Hầu hết các gói VPS không có GPU. Ollama sẽ chạy model trên CPU mà không cảnh báo. Kết quả có dùng được hay không phụ thuộc vào workload và mức độ bạn có thể chờ.

Thiết kế mixture-of-experts giúp tăng tốc độ. Với mỗi token, chỉ khoảng 3 tỷ trong tổng số 30 tỷ parameter được sử dụng. Vì vậy, lượng phép tính cho mỗi token nhỏ hơn nhiều so với model dense 30B. Nhưng bộ nhớ thì không giảm. Mọi expert phải luôn nằm trong memory, vì router có thể chọn bất kỳ expert nào cho token tiếp theo. Do đó, máy chỉ có CPU vẫn cần toàn bộ 19 GB hoặc hơn cho tag Q4. Throughput của nó chủ yếu phụ thuộc vào memory bandwidth, không phải clock speed.

Điều này có một hệ quả thực tế: hai gói có cùng số core và cùng dung lượng RAM vẫn có thể tạo token ở tốc độ khác nhau rõ rệt vì hệ thống memory của chúng khác nhau. Gói shared còn có thêm một biến số, vì thời gian CPU bị hàng xóm gây nhiễu lấy mất xuất hiện dưới dạng tốc độ token mỗi giây thay đổi theo từng giờ. Đây là lý do số liệu do người khác công bố không dự đoán được kết quả của bạn, đồng thời là lý do section tiếp theo đưa ra một quy trình đo thay vì một bảng kết quả.

Đo tokens mỗi giây trên hệ thống của bạn

Endpoint generate của Ollama trả về các trường thời gian trong object JSON cuối cùng. Lấy số token đã sinh chia cho thời lượng sinh là bạn có tốc độ tokens mỗi giây trên plan và prompt của mình.

sudo apt install -y jq
curl -s http://localhost:11434/api/generate -d '{
  "model": "glm-4.7-flash:q4_K_M",
  "prompt": "Write a 200 word explanation of how TCP congestion control works.",
  "stream": false,
  "options": {"num_ctx": 8192}
}' | jq '{
  tokens: .eval_count,
  tokens_per_second: (.eval_count / .eval_duration * 1e9),
  prompt_seconds: (.prompt_eval_duration / 1e9),
  load_seconds: (.load_duration / 1e9)
}'

eval_count là số token đã được sinh, còn eval_duration là số nanosecond đã dùng để sinh chúng, nên eval_count / eval_duration * 1e9 là số token mỗi giây. prompt_eval_duration là thời gian đọc prompt, tương ứng với khoảng chờ trước khi token đầu tiên xuất hiện. load_duration là thời gian nạp model từ disk, nên giá trị này lớn ở lần gọi đầu tiên sau khi restart và gần bằng 0 ở lần gọi tiếp theo.

Hãy chạy 3 lần và giữ kết quả lần thứ 2 và lần thứ 3, vì lần đầu có cả thời gian nạp model. Sau đó chạy lại với prompt dài hơn nhiều, vì thời gian xử lý prompt tăng theo độ dài input còn tốc độ sinh token thì không. Ghi các con số này cạnh tên plan và quantisation của bạn. Bản ghi đó có giá trị hơn mọi benchmark bạn đọc, vì nó được đo trên phần cứng mà bạn đang trả tiền để sử dụng.

Cách độ dài context làm tăng bộ nhớ theo cấp số nhân

Ollama mặc định dùng context 4096 token. Model công bố có thể hỗ trợ nhiều hơn đáng kể, 198K token cho glm-4.7-flash, nhưng mặc định bạn không được dùng mức đó, và bật lên sẽ tốn thêm tài nguyên.

KV cache lưu một key vector và một value vector cho mỗi token trong mỗi layer. Kích thước của cache tăng tuyến tính theo số token được cho phép. Tăng từ 4096 lên 32768 token nghĩa là context lớn hơn 8 lần, nên KV cache cũng lớn hơn khoảng 8 lần. Với một máy chỉ vừa đủ bộ nhớ cho weights, phần cấp phát thêm này sẽ đẩy hệ thống vào swap. Vì vậy, một máy xử lý prompt ngắn bình thường có thể đột nhiên chạy rất chậm khi có người dán vào một tài liệu dài.

Đặt giá trị này cho từng request bằng num_ctx trong options object, như trong lệnh curl ở trên, hoặc thay đổi giá trị mặc định của server.

sudo install -d -m 755 /etc/systemd/system/ollama.service.d
printf '[Service]\nEnvironment="OLLAMA_CONTEXT_LENGTH=16384"\n' \
  | sudo tee /etc/systemd/system/ollama.service.d/override.conf
sudo systemctl daemon-reload
sudo systemctl restart ollama
systemctl show ollama --property=Environment

Lệnh cuối cùng phải in ra giá trị OLLAMA_CONTEXT_LENGTH của bạn. Nếu lệnh in ra Environment= rỗng, file override nằm sai thư mục hoặc quá trình reload đã bị bỏ qua. Sau lần load model tiếp theo, ollama ps phải hiển thị SIZE lớn hơn rõ rệt so với khi đặt ở 4096. Tăng giá trị theo từng bước và theo dõi con số đó sau mỗi lần thay đổi. Đặt độ dài context của Ollama bằng num_ctx giải thích cách thiết lập này tương tác với keep-alive và các request song song, vì cả hai đều làm tăng cùng loại chi phí. Nếu có nhiều client sử dụng server, hãy đặt giới hạn concurrency cùng lúc với context, vì mỗi slot song song có KV cache riêng và thiết lập queue quyết định request thứ hai sẽ phải chờ hay bị từ chối ngay.

API rẻ hơn máy chủ

Tự host không phải lúc nào cũng rẻ hơn. Với dòng model này, bảng giá niêm yết thể hiện điều đó đặc biệt rõ.

ChartZ.ai published list prices per million tokens, checked 2026-08-18
The data behind this chart
[
  {
    "label": "GLM-5.2 input",
    "usd_per_million_tokens": 1.4
  },
  {
    "label": "GLM-5.2 output",
    "usd_per_million_tokens": 4.4
  },
  {
    "label": "GLM-4.7-Flash input",
    "usd_per_million_tokens": 0
  },
  {
    "label": "GLM-4.7-Flash output",
    "usd_per_million_tokens": 0
  }
]

Tính đến ngày 18 August 2026, Z.ai niêm yết GLM-5.2 ở mức $1.4 cho mỗi triệu input token và $4.4 cho mỗi triệu output token. GLM-4.7-Flash, model mà hướng dẫn này chạy local, có mức giá $0 cho cả input lẫn output. Đây là các mức giá được công bố và có thể thay đổi. Hãy kiểm tra trang hiện tại trước khi lập ngân sách dựa trên một trong hai mức giá này.

Vì vậy, lập luận về chi phí cho việc self-host glm-4.7-flash hiện không thuyết phục. Một VPS có đủ RAM tốn tiền thật mỗi tháng, trong khi nhà phát hành cung cấp cùng model này miễn phí. Điều bạn có được khi tự chạy model là những thứ khác: prompt của bạn vẫn nằm trên máy do bạn kiểm soát, và phiên bản model không thay đổi trừ khi bạn tự thay đổi. Đây là những lý do chính đáng để self-host. Với model này và các mức giá hiện tại, chi phí không phải là một trong số đó.

Phép tính sẽ thay đổi khi model bạn cần không miễn phí hoặc khi dữ liệu của bạn không được phép rời khỏi network riêng vì lý do pháp lý. Điểm hòa vốn giữa GPU VPS và API token phân tích phép tính này, đồng thời nêu rõ từng biến. Nếu bạn vẫn đang chọn máy chủ, chi phí thực tế của một VPS mỗi tháng là phần còn lại của tổng chi phí.

Giữ endpoint trên localhost

Đây là bước nhiều người bỏ qua, nhưng lại là bước quan trọng nhất.

Mặc định, Ollama bind vào 127.0.0.1 trên cổng 11434, nên chỉ có thể truy cập từ chính server đó. Hãy xác nhận trên máy của bạn, đừng chỉ mặc định là như vậy.

ss -ltnp | grep 11434

Kết quả cần thấy là 127.0.0.1:11434. Nếu thấy 0.0.0.0:11434 hoặc *:11434, nghĩa là API đang listen trên mọi interface, bao gồm cả interface public.

Điều này nguy hiểm vì API của Ollama không có authentication. Không có password, token hay allowlist. Bất kỳ ai truy cập được cổng 11434 đều có thể liệt kê model của bạn, chạy generation trên phần cứng bạn đang trả phí, pull model mới vào disk cho đến khi disk đầy và xóa các model hiện có. Cổng 11434 là cổng cố định và phổ biến, nên scanner sẽ nhanh chóng tìm thấy các cổng đang mở.

Không đặt OLLAMA_HOST=0.0.0.0. Nhiều tutorial đề xuất cách này để sửa lỗi client trên laptop không kết nối được, nhưng đó là cách sửa sai. Thay vào đó, hãy forward cổng.

ssh -N -L 11434:127.0.0.1:11434 you@your-server

Cách này map cổng 11434 trên laptop vào địa chỉ loopback của server thông qua SSH. Vì vậy, mọi client được cấu hình với http://localhost:11434 vẫn hoạt động mà không cần thay đổi, đồng thời không expose thêm dịch vụ nào. Nếu có nhiều người hoặc nhiều máy cần truy cập, hãy đặt server trong một private tunnel network và bind Ollama vào địa chỉ của tunnel, tuyệt đối không bind vào 0.0.0.0.

Hãy xác minh từ một nơi khác, không phải server. Từ laptop, sau khi đóng SSH tunnel:

curl -m 5 http://your-server-ip:11434/api/tags

Kết quả đúng là curl: (28) Connection timed out hoặc curl: (7) Failed to connect. Nếu nhận được JSON list chứa các model của bạn, nghĩa là cổng đang mở ra Internet và cần xử lý ngay. Network firewall của nhà cung cấp là một lớp kiểm soát riêng với firewall đang chạy trên server, nên hãy kiểm tra cả hai. Câu hỏi rộng hơn về việc VPS hosting có an toàn không trình bày các thiết lập baseline còn lại cho một máy bạn để chạy liên tục.

Nếu glm-4.7-flash vẫn quá lớn

Khi tag Q4 không phù hợp với gói VPS của bạn, cách xử lý là dùng model nhỏ hơn, không phải giảm context. Giảm context để cố nhét model vào sẽ chỉ tạo ra một model tải được nhưng fail ngay ở prompt dài đầu tiên. Qwen 3 ở 8B và 27B trên VPS hướng dẫn cùng quy trình cài đặt với các kích thước phù hợp cho VPS cấu hình vừa phải, còn hướng dẫn chung về self-host LLM bằng Ollama trên VPS trình bày những phần không thay đổi dù bạn chọn model nào. Dù chọn model nào, hãy cố định tag, đo hiệu năng trên chính gói VPS của bạn và để endpoint chỉ listen trên loopback.

FAQ

GLM 5.2 có chạy cục bộ trên VPS được không?

Không. Tính đến ngày 18 tháng 8 năm 2026, GLM 5.2 chỉ tồn tại trong thư viện của Ollama dưới dạng glm-5.2:cloud, một tag chạy trên hạ tầng của Ollama và cần ollama signin trước khi hoạt động. Model này có 756 tỷ tham số, nên ngay cả khi dùng 4 bit cho mỗi tham số, riêng phần weights đã chiếm hàng trăm gigabyte, vượt xa dung lượng mà mọi gói VPS tiêu chuẩn cung cấp. Model GLM có weights cho phép tải xuống và phù hợp với server thuê là glm-4.7-flash.

glm-4.7-flash cần bao nhiêu RAM?

Hãy xem kích thước download của tag là mức tối thiểu, sau đó cộng thêm dung lượng cho KV cache và hệ điều hành. Ollama liệt kê tag Q4 có dung lượng 19 GB, Q8 là 32 GB và tag bfloat16 là 60 GB. Không có hệ số cố định nào phù hợp với mọi trường hợp, vì KV cache tăng theo context length bạn đặt. Hãy load model, chạy ollama ps và đọc cột SIZE để biết con số thực tế trên máy của bạn.

Làm cách nào để đo số token mỗi giây trên VPS của tôi?

Gửi một request đến http://localhost:11434/api/generate với "stream": false, sau đó đọc eval_count và eval_duration từ response. Số token mỗi giây là eval_count / eval_duration * 1e9, vì eval_duration được báo cáo theo nanosecond. Bỏ qua lần chạy đầu tiên, vì load_duration trong lần đó bao gồm thời gian đọc weights từ disk. Đồng thời lặp lại phép đo với một prompt dài, vì prompt_eval_duration tăng theo độ dài input trong khi tốc độ generation không đổi.

Tại sao không nên đặt OLLAMA_HOST thành 0.0.0.0?

Vì API của Ollama không có authentication, nên bind vào 0.0.0.0 sẽ đưa một endpoint không yêu cầu authentication lên public internet. Bất kỳ ai truy cập được port 11434 đều có thể generate trên phần cứng của bạn và thay đổi các model đã cài đặt. Hãy giữ bind mặc định là 127.0.0.1, kiểm tra bằng ss -ltnp | grep 11434 và truy cập API từ laptop qua SSH tunnel, chẳng hạn như ssh -N -L 11434:127.0.0.1:11434 you@your-server.