Trang chủ Hướng dẫn Bài viết Giới thiệu

Ước tính bộ nhớ cho mô hình ngôn ngữ chạy trên máy

Tính cả trọng số, cache KV và độ dài ngữ cảnh; kiểm tra cách dùng RAM, VRAM và lượng tử hóa bằng tài liệu thực tế.

Trong bài viết này
  1. Tính trọng số như một phần của dự toán
  2. Cache KV giữ trạng thái của văn bản
  3. Đặt độ dài cùng số yêu cầu đồng thời
  4. Giảm độ chính xác cần kiểm tra câu trả lời
  5. Hiểu số đo trước khi dọn cache
  6. Chuyển sang CPU rồi đo cả nhiệm vụ
  7. Nguồn tham khảo

Trước khi đưa biên bản họp vào trợ lý trên máy, bạn cần chọn mô hình để đọc tài liệu. Khi chọn mô hình, dung lượng tệp tải xuống có vẻ vừa với bộ nhớ còn trống. Nhưng lúc xử lý, văn bản cũng cần chỗ: suy luận dùng thêm trạng thái chú ý và vùng làm việc bên cạnh trọng số.12

Cần kiểm tra đến khi trợ lý trả lời xong. Bài viết dựa trên tài liệu chính thức, không đưa ra kết quả thử nghiệm phần cứng hay xếp hạng máy tính.

Tính trọng số như một phần của dự toán

Trọng số chứa các tham số đã học. Lượng tử hóa lưu chúng ở độ chính xác thấp hơn để giảm bộ nhớ, đồng thời cố giữ độ chính xác của kết quả. Vì vậy, số tham số phải đi kèm định dạng và tệp cụ thể mới giúp ước tính dung lượng.3

Có thể dự toán riêng trọng số thường trú, cache KV, vùng tính toán tạm và phần cấp phát khi chạy. Ứng dụng khác cần phần riêng. Đây là cách phân chia để lập kế hoạch; cách tải và đặt dữ liệu trên CPU hay GPU sẽ thay đổi mức dùng cũng như đỉnh bộ nhớ.142

Riêng trọng số, phép tính số tham số nhân số bit rồi chia tám chỉ ước lượng số byte khi mọi tham số dùng cùng độ chính xác và được đóng gói sát nhau. Hằng số lượng tử hóa và mô-đun dùng độ chính xác khác có thể phát sinh thêm. Công thức chưa gồm cache.35

Cache KV giữ trạng thái của văn bản

Transformer tự hồi quy dùng ngữ cảnh trước đó để tạo token tiếp theo. Cache KV giữ các khóa và giá trị chú ý của token đã xử lý để tái sử dụng phép tính. Phần này gắn với yêu cầu đang chạy, tách khỏi trọng số đã học.1

Cache động tăng trong lúc sinh câu trả lời. Cache tĩnh dành trước dung lượng tối đa, nên hội thoại ngắn vẫn có thể đi kèm vùng đặt trước lớn. Các lớp dùng cửa sổ trượt hoặc chú ý theo khối có giới hạn tăng riêng. Không nên suy rộng mức dùng giữa các kiến trúc.6

Với cache chú ý đầy đủ thông thường, ước lượng còn phụ thuộc token được giữ, chuỗi đồng thời, số lớp, số đầu KV, kích thước đầu và độ chính xác cache. Số tham số không xác định tất cả điều kiện này. Khi so độ dài, hãy giữ nguyên mô hình và độ chính xác.16

Đặt độ dài cùng số yêu cầu đồng thời

Ollama nêu rằng ngữ cảnh dài hơn cần thêm bộ nhớ. Xử lý nhiều yêu cầu song song trên cùng mô hình cũng tăng phần ngữ cảnh được cấp. Trọng số dùng chung không thay thế trạng thái của từng yêu cầu. Nhân kích thước tệp với số người dùng cũng không mô tả đúng cách cấp phát.78

Bắt đầu bằng báo cáo mẫu với các yêu cầu nối tiếp. Nếu định cho nhiều người dùng chung trợ lý, hãy thử xử lý đồng thời nhiều yêu cầu có tài liệu dài. Phân biệt công việc đang chạy và đang chờ: Ollama có điều khiển riêng cho xử lý song song và hàng đợi.7

Dùng ollama ps để xem ngữ cảnh được cấp và phân bố CPU/GPU. Khi so sánh các cấu hình, hãy đặt rõ độ dài ngữ cảnh. Tính cả chỉ dẫn và lịch sử trò chuyện trong đầu vào, đồng thời chừa chỗ trong cửa sổ ngữ cảnh cho câu trả lời. Dùng bộ tách token của mô hình để kiểm tra độ dài đầu vào thực tế. FAQ và hướng dẫn ngữ cảnh hiện mô tả giá trị mặc định khác nhau; nên ghi nhận cấu hình thực tế.78

Giảm độ chính xác cần kiểm tra câu trả lời

Tệp trọng số lượng tử hóa không quyết định độ chính xác cache. llama.cpp có tùy chọn riêng cho cache khóa và giá trị; Ollama cũng có thiết lập lượng tử hóa KV. Hãy kiểm tra khả năng hỗ trợ của môi trường đang dùng.79

Theo Ollama, ảnh hưởng tới chất lượng tùy mô hình và nhiệm vụ. Chọn tài liệu có chi tiết kiểm chứng được, giữ nguyên chỉ dẫn rồi đổi từng thiết lập độ chính xác. So nội dung bị bỏ sót và định dạng đầu ra, cùng mức bộ nhớ tiết kiệm được.7

Tốc độ cũng cần đo lại. Transformers cảnh báo lượng tử hóa cache có thể làm tăng độ trễ với ngữ cảnh ngắn khi bộ nhớ GPU vốn đã đủ. Chỉ bật sau khi xác định giới hạn cần giải quyết, rồi chạy lại đúng nhiệm vụ đó.6

Hiểu số đo trước khi dọn cache

Trong PyTorch dùng CUDA, memory_allocated() theo dõi bộ nhớ tensor, còn memory_reserved() theo dõi vùng do bộ cấp phát cache quản lý. Có bộ đếm đỉnh tương ứng. Phần đặt trước chưa dùng vẫn có thể hiện là đã chiếm trong nvidia-smi.4

Hai số này chồng lấn, cộng lại sẽ tính trùng. empty_cache() giải phóng khối chưa dùng nhưng giữ tensor đang hoạt động. Nó không xóa trọng số hay cache KV còn cần thiết. Các hàm này thuộc PyTorch; với llama.cpp cần xem báo cáo riêng.49

Chuyển sang CPU rồi đo cả nhiệm vụ

llama.cpp cho phép giới hạn số lớp nằm trong VRAM. Cơ chế chuyển cache của Transformers giữ phần lớn cache lớp ở CPU rồi truyền khi cần. Hãy ghi rõ chuyển trọng số hay cache vì đây là các đối tượng khác nhau.69

RAM hệ thống và VRAM riêng cần dự toán tách biệt. Việc truyền cache có thể giảm thông lượng sinh văn bản. Tài liệu không đưa ra hệ số giảm tốc dùng chung cho mọi máy. Hãy đo thời gian hoàn thành tài liệu mẫu để đánh giá cấu hình có phù hợp công việc hay không.62

Hiện tượngPhần cần xemCách đối chiếu
Lỗi lúc tảiTrọng số, vị trí, đỉnh tải2Tệp nhỏ hơn, giữ thiết lập khác
Lỗi với báo cáo dàiNgữ cảnh và cache KV68Rút ngắn ngữ cảnh
Lỗi khi yêu cầu chồng lấnCấp phát song song7Chạy nối tiếp cùng nhiệm vụ
Bộ nhớ GPU vẫn bị chiếm dụng nhiều sau khi trả lời xongTensor và vùng đặt trước PyTorch4So allocated với reserved
Chậm sau khi chuyển CPUTruyền dữ liệu và thực thi62Chỉ đổi cách phân bố

Bảng đưa ra hướng kiểm tra, chưa xác định nguyên nhân. Lưu phiên bản mô hình, phần mềm, ngữ cảnh, độ chính xác cache, phân bố và số yêu cầu hoạt động. Quan sát cả tải, xử lý đầu vào và sinh câu trả lời vì các giai đoạn cấp phát khác nhau.12

Giữ báo cáo mẫu để chạy lại sau mỗi lần thay mô hình hoặc cập nhật phần mềm. Đối chiếu chất lượng và thời gian của cùng nhiệm vụ sẽ giúp bạn chọn cấu hình tiếp theo.

Nguồn tham khảo

Footnotes

  1. Hugging Face Transformers — Bản gốc tiếng Anh về cache KV và kích thước tensor: https://huggingface.co/docs/transformers/en/cache_explanation ↩ ↩2 ↩3 ↩4 ↩5

  2. Hugging Face Accelerate — Tải mô hình, phân bố thiết bị và bộ nhớ thực thi; nguồn tiếng Anh: https://huggingface.co/docs/accelerate/en/concept_guides/big_model_inference ↩ ↩2 ↩3 ↩4 ↩5 ↩6

  3. Hugging Face Transformers — Tài liệu chính thức tiếng Anh về lượng tử hóa và độ chính xác: https://huggingface.co/docs/transformers/en/quantization/overview ↩ ↩2

  4. PyTorch CUDA — Tensor, vùng đặt trước, đỉnh bộ nhớ và giải phóng cache; nguồn tiếng Anh: https://docs.pytorch.org/docs/2.14/notes/cuda.html ↩ ↩2 ↩3 ↩4

  5. Hugging Face bitsandbytes — Hằng số lượng tử hóa và độ chính xác mô-đun; nguồn tiếng Anh: https://huggingface.co/docs/transformers/en/quantization/bitsandbytes ↩

  6. Hugging Face Transformers — Cache động, tĩnh, lượng tử hóa và chuyển CPU; nguồn tiếng Anh: https://huggingface.co/docs/transformers/en/kv_cache ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7

  7. Ollama FAQ — Song song, hàng đợi, vị trí dữ liệu và lượng tử hóa cache; nguồn tiếng Anh: https://docs.ollama.com/faq ↩ ↩2 ↩3 ↩4 ↩5 ↩6

  8. Ollama — Độ dài ngữ cảnh và kiểm tra cấp phát; hướng dẫn tiếng Anh: https://docs.ollama.com/context-length ↩ ↩2 ↩3

  9. llama.cpp server — Tùy chọn chính thức cho lớp GPU và kiểu cache K/V: https://github.com/ggml-org/llama.cpp/blob/master/tools/server/README.md ↩ ↩2 ↩3