Chạy GLM trên VPS với Ollama: cần bao nhiêu RAM?
GLM 5.2 trong Ollama chỉ chạy cloud, không tải weights về VPS. Dùng model GLM 30B-A3B và xem RAM cần cho từng quantisation.
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 18 August 2026, GLM 5.2 trong library 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 weights không bao giờ được ghi xuống disk. Model này 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 cơ bản, chưa tính context, activations hoặc operating system. Không có gói VPS tiêu chuẩn nào cung cấp nhiều memory đến 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ể tải xuống 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 parameters active cho mỗi token. Vì vậy, guide 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 server phù hợp, tự đo tốc độ 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. Library 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 với weights chạy local, hãy ưu tiên bản đó và ghi lại tag bạn thực sự đã test.
Nếu 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. Hãy hiểu rõ điều bạn đang 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ó những tag GLM nào 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à bản chạy local. Đây là các tag đã được publish của nó, cùng với dung lượng download mà Ollama liệt kê cho từng tag.
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 được publish trên trang library, không phải số đo thực tế. latest và q4_K_M đều được liệt kê ở mức 19 GB, nên hiện tại latest 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 không kèm quantisation 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.
Kết quả tìm kiếm trên library cũng trả về các bản upload có namespace và có dấu slash trong tên, chẳng hạn someuser/glm-5.2. Dấu slash cho biết bản đó do một user account publish, nên đó là bản re-upload từ cộng đồng chứ không phải entry chính thức. Không ai bảo đảm bên trong có những weight nào. Hãy xử lý bản đó như một binary chưa được ký mà bạn tìm thấy trên Internet.
Cài đặt Ollama và pull đúng tag
Trình cài đặt Ollama trên Linux chỉ cần một lệnh.
curl -fsSL https://ollama.com/install.sh | sh
ollama --versionTrình cài đặt tạo một systemd service chạy dưới user ollama. Xác nhận service đã khởi động trước khi pull bất kỳ thứ gì.
systemctl status ollama --no-pagerActive: active (running) cho biết 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 sẽ 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 để upgrade. Tính đến ngày 18 August 2026, 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 lsollama 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 bị dừng giữa chừng thì không có gì có thể chạy được, vì vậy hãy chạy lại cùng lệnh. 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 quantisation cần bao nhiêu RAM?
Hãy bắt đầu với kích thước download làm mức tối thiểu, rồi cộng thêm các phần khác. Weights phải nằm trong memory. Bên trên chúng là KV cache (key/value cache), tức memory mà runtime dùng để ghi nhớ các token đã có trong cuộc hội thoại, cùng với compute buffer và phần memory mà operating system đ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 đúng cho mọi trường hợp, vì KV cache tăng theo context length bạn cho phép, còn các phần khác 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 đọc lượng memory mà server đã reserve.
ollama run glm-4.7-flash:q4_K_M "Reply with the single word: ready"
ollama psollama ps in model đã load với một cột SIZE và một cột PROCESSOR. SIZE là lượng memory mà runtime thực sự đã reserve. Đây là con số bạn cần so sánh với kế hoạch của mình. PROCESSOR cho biết công việc được thực hiện ở đâu, nên 100% CPU nghĩa là hoàn toàn không dùng GPU.
Khi model không vừa memory, lỗi thường 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 liên tục được chuyển giữa disk và RAM cho từng token. Khi không có swap, process bị kill ngay lập tức, và journalctl -k | grep -i "out of memory" hiển thị dòng Out of memory: Killed process của kernel, trong đó có tên ollama. Hãy kiểm tra cả 2, vì không lệnh nào hiển thị thông báo 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à đòn bẩy chính để điều chỉnh con số này. Q4 làm giảm một phần chất lượng output. Mức giảm phụ thuộc vào task; structured output và các chuỗi reasoning 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 một VPS chỉ có 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 gói VPS không có GPU, và 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 chấp nhận phải 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ỷ parameters được sử dụng, nên lượng tính toán cho mỗi token nhỏ hơn nhiều so với model dense 30B. Phần không giảm là bộ nhớ. Mọi expert đều phải luôn nằm trong RAM, vì router có thể chọn bất kỳ expert nào cho token tiếp theo. Vì vậy, máy chỉ có CPU vẫn cần đủ 19 GB hoặc hơn cho tag Q4, và throughput chủ yếu bị giới hạn bởi memory bandwidth thay vì 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 kết quả với tốc độ khác nhau rõ rệt vì memory subsystem của chúng khác nhau. Gói shared tạo thêm một biến số, vì thời gian CPU bị hàng xóm gây nhiễu chiếm dụng xuất hiện dưới dạng chỉ số tokens-per-second thay đổi theo từng giờ. Đây là lý do không có số liệu do người khác công bố nào dự đoán chính xác kết quả của bạn, và cũng 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 số token mỗi giây của chính bạn
Endpoint generate của Ollama trả về các trường timing trong object JSON cuối cùng. Chia số token đã tạo cho thời gian generation là bạn có tốc độ của mình, 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 đã tạo và eval_duration là số nanosecond dùng để tạo 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ức khoảng chờ trước khi token đầu tiên xuất hiện theo cảm nhận của người dùng. load_duration là thời gian load 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.
Chạy lệnh 3 lần và giữ kết quả lần thứ 2 và thứ 3, vì lần đầu có bao gồm thời gian load 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 độ generation không đổi. Ghi các con số cạnh tên plan và quantisation của bạn. Bản ghi này có giá trị hơn bất kỳ benchmark nào bạn đọc, vì nó được đo trên phần cứng mà bạn đang trả phí để sử dụng.
Độ dài context làm tăng bộ nhớ như thế nào
Ollama mặc định dùng context 4096 token. Model công bố hỗ trợ nhiều hơn, lên đến 198K token cho glm-4.7-flash, nhưng giá trị này không được bật mặc định và việc bật nó không miễn phí.
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 tăng 8 lần, vì vậy KV cache cũng tăng khoảng 8 lần. Trên máy chỉ vừa đủ chỗ 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 ai đó 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 object options, 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=EnvironmentLệ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 dùng 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 tùy chọn này tương tác với keep-alive và các request chạy song song; cả hai đều làm tăng cùng loại chi phí này.
Khi API rẻ hơn máy chủ
Tự host không phải lúc nào cũng rẻ hơn. Với nhóm model này, bảng giá công bố cho thấy điều đó đặc biệt rõ.
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 tháng 8 năm 2026, Z.ai niêm yết GLM-5.2 ở mức ${{q:glm_api_price:usd_per_million_tokens} 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ả hai chiều. Đây là các mức giá đã công bố và có thể thay đổi, vì vậy 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 model.
Vì vậy, lập luận về chi phí cho việc self-host glm-4.7-flash hiện khá yếu. Một VPS có đủ RAM sẽ tiêu tốn chi phí thực mỗi tháng, trong khi nhà cung cấp cho chạy cùng model miễn phí. Giá trị bạn có được khi tự chạy model nằm ở điểm khác: prompt của bạn vẫn ở trên máy do bạn kiểm soát, và phiên bản model không bao giờ thay đổi trừ khi bạn tự thay đổi. Đây là những lý do hợp lý để 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 muố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à token API trình bày phép tính đó với từng biến được nêu rõ. Nếu bạn vẫn đang chọn máy, chi phí thực tế của một VPS mỗi tháng là nửa còn lại của phép tính.
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 port 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ỉ giả định.
ss -ltnp | grep 11434Bạn cần thấy 127.0.0.1:11434. Nếu thấy 0.0.0.0:11434 hoặc *:11434, nghĩa là API đang listening trên mọi interface, bao gồm cả interface public.
Điều này quan trọng vì API của Ollama không có cơ chế authentication. Không có password, token hay allowlist. Bất kỳ ai truy cập được port 11434 đều có thể liệt kê model, chạy generation trên phần cứng mà 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ó. Port 11434 là port cố định và phổ biến, nên scanner nhanh chóng tìm thấy các port đang mở.
Không đặt OLLAMA_HOST=0.0.0.0. Nhiều tutorial đề xuất cách này để xử lý trường hợp 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 port.
ssh -N -L 11434:127.0.0.1:11434 you@your-serverLệnh này map port 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 đều 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 đưa server vào 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/tagscurl: (28) Connection timed out hoặc curl: (7) Failed to connect là kết quả đúng. Nếu nhận được danh sách model ở dạng JSON, nghĩa là port đang mở ra Internet và cần được xử lý ngay. Network firewall của provider là một lớp kiểm soát riêng với firewall 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 hosting VPS có an toàn hay không trình bày các thiết lập baseline còn lại cho một máy luôn chạy.
Nếu glm-4.7-flash vẫn quá lớn
Khi tag Q4 không phù hợp với plan của bạn, hãy dùng model nhỏ hơn thay vì giảm context. Giảm context để nhồi model vào máy chỉ khiến model load được, rồi 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 với những máy có tài nguyên vừa phải. hướng dẫn chung về việc tự 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 pin tag, đo hiệu năng trên plan của chính bạn và giữ endpoint chỉ listen trên loopback.
FAQ
GLM 5.2 có chạy cục bộ trên VPS không?
Không. Tính đến ngày 18 August 2026, GLM 5.2 chỉ có trong library của Ollama dưới dạng glm-5.2:cloud; đây là 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 billion tham số, nên ngay cả khi dùng 4 bit cho mỗi tham số, riêng 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 download 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 đó chừa thêm dung lượng cho KV cache và operating system. Ollama liệt kê tag Q4 ở mức 19 GB, Q8 ở mức 32 GB và tag bfloat16 ở mức 60 GB. Không có multiplier 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. Load model, chạy ollama ps rồi đọc cột SIZE để biết mức sử dụng thực tế trên máy của bạn.
Làm thế 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 trong 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. Lặp lại phép đo với một prompt dài, vì prompt_eval_duration tăng theo độ dài input còn tốc độ generation thì không.
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 hardware của bạn và thay đổi các model đã cài đặt. Giữ bind mặc định là 127.0.0.1, kiểm tra bằng ss -ltnp | grep 11434, rồi truy cập API từ laptop qua SSH tunnel như ssh -N -L 11434:127.0.0.1:11434 you@your-server.