Tối ưu hóa chi phí sử dụng LLM

From Systems analysis wiki
Jump to navigation Jump to search

Tối ưu hóa chi phí sử dụng các mô hình ngôn ngữ lớn (LLM) — là tập hợp các chiến lược và phương pháp kỹ thuật nhằm giảm thiểu tài nguyên tính toán và tài chính cần thiết cho việc huấn luyện, fine-tuning và đặc biệt là thực thi (inference) các mô hình ngôn ngữ lớn. Tầm quan trọng của lĩnh vực này xuất phát từ chi phí khổng lồ trong cả quá trình phát triển lẫn vận hành LLM.

Ví dụ, chi phí huấn luyện mô hình GPT-3 với 175 tỷ tham số được ước tính vào khoảng 4,6 triệu USD trên hạ tầng GPU đám mây[1] và tiêu thụ 1,3 triệu kWh điện năng[2]. Tuy nhiên, chi phí chủ yếu thường rơi vào giai đoạn inference. Theo ước tính, chi phí vận hành hàng ngày để duy trì dịch vụ ChatGPT vào đầu năm 2023 vào khoảng 700 nghìn USD (xấp xỉ 0,0036 USD mỗi yêu cầu), vượt nhiều lần so với chi phí huấn luyện một lần[3].

Tối ưu hóa trong giai đoạn huấn luyện và lựa chọn mô hình

Quản lý chi phí hiệu quả bắt đầu từ những quyết định nền tảng được đưa ra trước giai đoạn inference.

Quy luật mở rộng quy mô: kích thước mô hình so với khối lượng dữ liệu

Một trong những bước đột phá quan trọng trong việc hiểu kinh tế học huấn luyện LLM chính là quy luật mở rộng quy mô Chinchilla, được các nhà nghiên cứu của DeepMind công bố vào năm 2022. Họ chỉ ra rằng để sử dụng tối ưu ngân sách tính toán, mô hình cần được huấn luyện trên khối lượng dữ liệu lớn hơn đáng kể so với thực tế trước đây[4].

Trước đây, người ta thường giả định rằng hiệu suất tăng chủ yếu nhờ tăng số lượng tham số. Tuy nhiên, nghiên cứu Chinchilla đã chứng minh rằng mô hình Chinchilla (70 tỷ tham số), được huấn luyện trên 1,4 nghìn tỷ token, vượt trội về chất lượng so với mô hình lớn hơn nhiều là GPT-3 (175 tỷ tham số), được huấn luyện chỉ trên ~300 tỷ token[5]. Tỷ lệ được khuyến nghị là khoảng 20 token dữ liệu huấn luyện cho mỗi tham số của mô hình. Cách tiếp cận này cho phép tạo ra các mô hình nhỏ gọn và hiệu quả hơn, giảm cả chi phí huấn luyện lẫn chi phí inference sau này.

Fine-tuning và hiệu quả của nó

Thay vì tốn kém huấn luyện mô hình từ đầu, thực hành ngày càng phổ biến là fine-tuning các mô hình mã nguồn mở đã có sẵn (ví dụ: gia đình LLaMA, Falcon). Để giảm chi phí hơn nữa, các phương pháp fine-tuning hiệu quả về tham số (Parameter-Efficient Fine-Tuning, PEFT) được áp dụng.

Phương pháp phổ biến nhất, LoRA (Low-Rank Adaptation), cho phép thích ứng mô hình bằng cách chỉ cập nhật một số lượng nhỏ các tham số bổ sung. Các nghiên cứu cho thấy LoRA có thể giảm chi phí fine-tuning hàng chục phần trăm (lên đến ~68% trong một số kịch bản) với ảnh hưởng không đáng kể đến chất lượng[6].

Nén mô hình (Model Compression)

Một hướng tối ưu hóa quan trọng là giảm kích thước vật lý của mô hình trong khi vẫn duy trì hiệu suất của nó.

Chưng cất tri thức (Knowledge Distillation)

Chưng cất tri thức là quá trình trong đó một mô hình "giáo viên" lớn và mạnh được sử dụng để huấn luyện một mô hình "học sinh" nhỏ gọn hơn. Mô hình học sinh học cách bắt chước các phản hồi của giáo viên trên một tập dữ liệu rộng lớn, tiếp thu "tri thức" của giáo viên. Phương pháp này cho phép đạt được chất lượng tương đương trên các tác vụ cụ thể với chi phí thấp hơn đáng kể. Ví dụ, mô hình DeepSeek-R1 đã được chưng cất thành công từ 671 tỷ xuống còn 70 tỷ và thậm chí 1,5 tỷ tham số với mức giảm chất lượng chấp nhận được cho nhiều ứng dụng[7].

Lượng tử hóa (Quantization)

Lượng tử hóa là quá trình giảm độ chính xác số học được sử dụng để biểu diễn các trọng số của mô hình. Thay vì các số dấu phẩy động chuẩn 32-bit hoặc 16-bit, người ta sử dụng các số nguyên 8-bit hoặc thậm chí 4-bit.

  • Lượng tử hóa 8-bit giảm kích thước mô hình khoảng 50% với mức giảm độ chính xác khoảng 1%.
  • Lượng tử hóa 4-bit giảm kích thước mô hình 75%, đồng thời duy trì chất lượng đầu ra cạnh tranh[7].

Khi có hỗ trợ phần cứng (ví dụ: trong các GPU hiện đại của Nvidia) và các thư viện phần mềm (ví dụ: TensorRT), lượng tử hóa có thể tăng tốc inference lên 2–4 lần[8].

Tối ưu hóa trong giai đoạn inference

Khi mô hình đã được huấn luyện và triển khai, phần lớn chi phí liên quan đến việc sử dụng hàng ngày của nó.

Gộp yêu cầu (Batching)

Batching là việc kết hợp nhiều yêu cầu của người dùng thành một "batch" để xử lý đồng thời trên GPU. Điều này giúp tăng đáng kể mức độ sử dụng thiết bị và thông lượng tổng thể. Đối với LLM, nơi việc tạo ra các phản hồi diễn ra từng token một, phương pháp hiệu quả nhất là batching liên tục (continuous/in-flight batching). Phương pháp này cho phép động thái thêm các yêu cầu mới vào batch khi các yêu cầu khác trong đó hoàn thành, từ đó loại bỏ thời gian chờ và tối đa hóa mức tải GPU[9].

Bộ nhớ đệm khóa và giá trị (KV Cache)

Trong các mô hình transformer, để tạo ra mỗi token mới cần có thông tin về tất cả các token trước đó. Để tránh sự tăng trưởng theo hàm mũ của các phép tính, người ta áp dụng bộ nhớ đệm khóa và giá trị (KV Cache). Hệ thống lưu trữ các kết quả tính toán trung gian của cơ chế attention cho ngữ cảnh đã được xử lý và tái sử dụng chúng, giúp việc tạo ra các chuỗi dài và hội thoại nhiều lượt trở nên hiệu quả hơn đáng kể[7].

Tối ưu hóa cơ chế attention

Việc lưu trữ KV-cache đòi hỏi dung lượng bộ nhớ đáng kể. Để giảm thiểu điều này, các biến thể tối ưu hóa của cơ chế attention đã được phát triển:

  • Multi-Query Attention (MQA): Tất cả các đầu attention sử dụng chung một bộ khóa và giá trị.
  • Grouped-Query Attention (GQA): Một giải pháp dung hòa trung gian, trong đó các đầu attention được chia thành các nhóm, và mỗi nhóm sử dụng chung một bộ khóa và giá trị.

Công ty Meta đã áp dụng thành công GQA trong các mô hình LLaMA 2, giúp nâng cao đáng kể hiệu quả inference khi làm việc với các ngữ cảnh dài mà không giảm đáng kể chất lượng[10].

Tối ưu hóa hạ tầng và kiến trúc hệ thống

Hệ thống lai và Retrieval-Augmented Generation (RAG)

Không phải lúc nào cũng cần đến mô hình lớn nhất và mạnh nhất cho một tác vụ. Cách tiếp cận lai hay phân tầng đề xuất sử dụng mô hình nhỏ và rẻ cho các yêu cầu đơn giản, và chỉ khi thất bại hoặc với các tác vụ phức tạp, yêu cầu mới được chuyển đến mô hình lớn và đắt tiền hơn.

Một trường hợp đặc biệt và rất hiệu quả của cách tiếp cận này là Retrieval-Augmented Generation (RAG). Trong kiến trúc này, LLM có thể tương đối nhỏ gọn, vì để trả lời nó sử dụng thông tin cập nhật được lấy từ cơ sở tri thức bên ngoài (ví dụ: tài liệu doanh nghiệp hoặc hệ thống tìm kiếm). Điều này không chỉ giảm yêu cầu về kích thước mô hình mà còn giải quyết vấn đề ảo giác (hallucination). Việc triển khai mô hình chuyên biệt 70 tỷ tham số với RAG trên hạ tầng cục bộ có thể rẻ hơn 2–4 lần so với việc sử dụng API GPT-4 trên đám mây[11].

Ghi chú

  1. «OpenAI's GPT-3 Language Model: A Technical Overview». Lambda Labs. [1]
  2. «The Energy Footprint of Humans and Large Language Models». Communications of the ACM. [2]
  3. «The Inference Cost Of Search Disruption - Large Language Model Cost Analysis». SemiAnalysis. [3]
  4. Hoffmann, J., et al. (2022). «Training Compute-Optimal Large Language Models». arXiv:2203.15556.
  5. Chow, T. (2024). «Three Kuhnian Revolutions in ML Training». Substack. [4]
  6. «A Study to Evaluate the Impact of LoRA Fine-tuning on the Performance of Non-functional Requirements Classification». arXiv:2503.07927. (2025).
  7. 7.0 7.1 7.2 «LLM Inference Optimization: How to Speed Up, Cut Costs, and Scale AI Models». deepsense.ai. [5]
  8. Jin, H., et al. (2024). «GPTQ: Accurate Post-Training Quantization for Generative Pre-trained Transformers».
  9. «Continuous vs dynamic batching for AI inference». Baseten Blog. [6]
  10. «What is grouped query attention?». IBM. [7]
  11. «Inferencing on-premises with Dell Technologies». Dell Technologies Analyst Paper. [8]