•23 min read

Giải mã suy đoán trong vLLM: Tăng gấp ba thông lượng suy luận LLM với Eagle & Medusa

Giải mã suy đoán trong vLLM: Tăng gấp ba thông lượng suy luận LLM với Eagle & Medusa

Các Mô hình Ngôn ngữ Lớn (LLM) đã cách mạng hóa các ứng dụng AI, nhưng việc triển khai chúng trong môi trường sản xuất thường bị tắc nghẽn bởi độ trễ suy luận và thông lượng. Giải mã tự hồi quy, nơi mỗi token được tạo ra tuần tự, vốn dĩ chậm, đặc biệt đối với các mô hình lớn và chuỗi dài. Tài liệu này cung cấp một hướng dẫn chuyên sâu, có thẩm quyền về giải mã suy đoán (speculative decoding), một kỹ thuật mạnh mẽ để giảm thiểu nút thắt này, tập trung vào việc triển khai nó trong vLLM và các biến thể nâng cao như Medusa và Eagle. Chúng ta sẽ khám phá các nguyên tắc kiến trúc cơ bản, cấu hình vLLM thực tế, các điểm chuẩn hiệu suất và các cân nhắc quan trọng trong sản xuất.

Audio Briefing
0:00 / 0:00

Nút thắt tự hồi quy trong suy luận LLM

LLM tạo văn bản từng token một. Đối với mỗi token, toàn bộ quá trình forward pass của mô hình được thực thi, tiêu tốn đáng kể tài nguyên tính toán. Bản chất tuần tự này có nghĩa là tổng thời gian suy luận tăng tuyến tính với độ dài chuỗi đầu ra, khiến các ứng dụng thời gian thực, thông lượng cao trở nên thách thức.

Hãy xem xét một yêu cầu suy luận LLM điển hình:

  1. Mã hóa Prompt: Prompt đầu vào được mã hóa token và chuyển đổi thành các embedding số.
  2. Tạo Token đầu tiên: LLM xử lý các embedding prompt để dự đoán token đầu ra đầu tiên. Điều này liên quan đến một forward pass đầy đủ.
  3. Tạo Token tiếp theo: Token mới được tạo được thêm vào chuỗi đầu vào, và quá trình lặp lại. Mỗi token tiếp theo yêu cầu một forward pass đầy đủ khác, được điều kiện bởi tất cả các token trước đó.

Quá trình lặp đi lặp lại này, mặc dù đảm bảo chất lượng đầu ra cao, nhưng lại tốn kém về mặt tính toán. Mục tiêu chính của các kỹ thuật tối ưu hóa hiệu suất như giải mã suy đoán là phá vỡ sự phụ thuộc tuần tự nghiêm ngặt này và giới thiệu song song hóa khi có thể.

Advertisement

Giải mã suy đoán: Các nguyên tắc cơ bản

Giải mã suy đoán tăng tốc suy luận LLM bằng cách tận dụng một mô hình "nháp" nhỏ hơn, nhanh hơn để dự đoán nhiều token trong tương lai song song, sau đó được mô hình "mục tiêu" lớn hơn, chính xác hơn xác minh trong một forward pass duy nhất, hiệu quả.

Ý tưởng cốt lõi đơn giản nhưng sâu sắc:

  1. Tạo nháp: Một mô hình nháp nhỏ, không tốn kém về mặt tính toán (ví dụ: một phiên bản nhỏ hơn của mô hình mục tiêu, hoặc một mô hình nháp được xây dựng có mục đích) nhanh chóng tạo ra một chuỗi k token ứng cử viên. Đây là một dự đoán suy đoán về các token trong tương lai.
  2. Xác minh mục tiêu: Mô hình mục tiêu, là LLM chính, chất lượng cao, xử lý prompt gốc và các token ứng cử viên k trong một batch duy nhất. Nó dự đoán phân phối xác suất cho mỗi vị trí trong chuỗi, xác minh hiệu quả các dự đoán của mô hình nháp.
  3. Chấp nhận & Từ chối: Đối với mỗi token ứng cử viên, nếu token được dự đoán của mô hình mục tiêu khớp với token của mô hình nháp, ứng cử viên đó được chấp nhận. Quá trình tiếp tục cho đến khi xảy ra sự không khớp hoặc tất cả k ứng cử viên được xác minh.
  4. Lấy mẫu lại: Nếu xảy ra sự không khớp, dự đoán của mô hình mục tiêu cho vị trí đó được sử dụng, và các ứng cử viên chưa được xác minh còn lại bị loại bỏ. Quá trình sau đó khởi động lại từ token được chấp nhận cuối cùng, tạo ra các ứng cử viên mới.

Cơ chế này cho phép mô hình mục tiêu "nhảy vọt" bằng cách xác minh nhiều token song song, thay vì tạo chúng từng cái một. Mức tăng hiệu quả tỷ lệ thuận trực tiếp với số lượng token trung bình được chấp nhận trên mỗi bước xác minh ("tỷ lệ chấp nhận").

Tổng quan kiến trúc: Tương tác mô hình nháp-mục tiêu

Thiết lập điển hình bao gồm hai mô hình riêng biệt được tải vào bộ nhớ GPU:

  • Mô hình mục tiêu: LLM lớn, chất lượng cao (ví dụ: Llama-3-70B). Mô hình này chịu trách nhiệm cho đầu ra cuối cùng, chính xác.
  • Mô hình nháp: Một mô hình nhỏ hơn, nhanh hơn (ví dụ: Llama-3-8B, Eagle-7B). Vai trò chính của mô hình này là tạo ra các chuỗi token hợp lý một cách nhanh chóng.

Vòng lặp suy luận với giải mã suy đoán diễn ra như sau:

Chìa khóa để cải thiện hiệu suất nằm ở bản chất song song của bước E và F. Thay vì k forward pass tuần tự trên mô hình mục tiêu, chỉ một forward pass được thực hiện để xác minh k token.

Giải mã suy đoán nâng cao: Xác minh dựa trên cây (Medusa & Eagle)

Mặc dù giải mã suy đoán tiêu chuẩn mang lại những lợi ích đáng kể, nhưng hiệu quả của nó bị giới hạn bởi tỷ lệ chấp nhận tuyến tính. Nếu mô hình nháp không hoàn toàn phù hợp với mục tiêu, sự không khớp có thể xảy ra sớm, làm giảm hiệu quả k. Các phương pháp giải mã suy đoán dựa trên cây, chẳng hạn như Medusa và Eagle, giải quyết vấn đề này bằng cách tạo ra một cây token ứng cử viên, cho phép xác minh song song mạnh mẽ hơn.

Medusa: Giải mã đa đầu cho suy đoán dựa trên cây

Medusa (Multi-Head Decoding) tăng cường giải mã suy đoán bằng cách thêm nhiều đầu dự đoán vào một mô hình nháp duy nhất. Thay vì dự đoán một token tiếp theo duy nhất, mô hình nháp dự đoán một số token tiếp theo có thể có ở các vị trí tương lai khác nhau đồng thời.

Medusa hoạt động như thế nào:

  1. Mô hình nháp đa đầu: Một LLM tiêu chuẩn được tinh chỉnh hoặc điều chỉnh để có nhiều đầu ra. Mỗi đầu h_i được huấn luyện để dự đoán token ở vị trí i so với token hiện tại. Ví dụ, h_0 dự đoán token tiếp theo, h_1 dự đoán token sau đó, v.v.
  2. Tạo cây: Với một token hiện tại, mô hình nháp đa đầu tạo ra một "cây" token ứng cử viên. Mỗi đầu đóng góp vào một nhánh. Ví dụ, h_0 dự đoán t_1, h_1 dự đoán t_2 với t_1, v.v. Điều này tạo ra một cây tìm kiếm cục bộ nhỏ của các phần tiếp theo có thể có.
  3. Xác minh song song: Mô hình mục tiêu sau đó xác minh tất cả các đường dẫn trong cây được tạo này trong một forward pass duy nhất. Điều này được thực hiện bằng cách cung cấp cho mô hình mục tiêu prompt gốc cộng với tất cả các chuỗi ứng cử viên từ cây.
  4. Chọn đường dẫn tối ưu: Xác suất đầu ra của mô hình mục tiêu được sử dụng để xác định tiền tố hợp lệ dài nhất trong cây được tạo. Điều này cho phép chấp nhận nhiều token hơn ngay cả khi một số nhánh nhanh chóng phân kỳ.

Medusa tăng đáng kể số lượng token có thể được xác minh trong một lần chạy mô hình mục tiêu duy nhất, dẫn đến tỷ lệ chấp nhận hiệu quả cao hơn và thông lượng lớn hơn.

Eagle: Một mô hình nháp tối ưu hóa cho giải mã kiểu Medusa

Eagle đưa khái niệm Medusa đi xa hơn bằng cách thiết kế một mô hình nháp chuyên dụng, được tối ưu hóa cao đặc biệt cho giải mã suy đoán đa đầu. Trong khi Medusa thường điều chỉnh một LLM hiện có với nhiều đầu, Eagle được kiến trúc từ đầu để trở thành một mô hình nháp đa đầu hiệu quả.

Đặc điểm chính của Eagle:

  • Kiến trúc tối ưu hóa: Các mô hình Eagle thường nhỏ hơn và hiệu quả hơn các LLM đa năng, được thiết kế đặc biệt cho nhiệm vụ tạo cây token suy đoán.
  • Được huấn luyện trước cho suy đoán: Chúng thường được huấn luyện hoặc tinh chỉnh với trọng tâm là tạo ra các chuỗi token suy đoán chất lượng cao có khả năng được các mô hình mục tiêu lớn hơn chấp nhận.
  • Tỷ lệ chấp nhận cao: Do thiết kế chuyên biệt của chúng, các mô hình Eagle có xu hướng đạt được tỷ lệ chấp nhận cao hơn so với việc sử dụng một LLM nhỏ hơn chung chung làm mô hình nháp.

Sử dụng Eagle làm mô hình nháp trong vLLM (hoặc các công cụ suy luận khác) có thể mang lại hiệu suất vượt trội so với việc sử dụng một LLM nhỏ hơn tiêu chuẩn, vì nó được xây dựng có mục đích cho nhiệm vụ này.

Suy đoán nháp N-gram

Mặc dù ít phổ biến hơn trong các triển khai nâng cao của vLLM, nhưng đáng chú ý là các dạng giải mã suy đoán đơn giản hơn. Ví dụ, suy đoán nháp N-gram sử dụng một mô hình ngôn ngữ n-gram đơn giản (hoặc một mô hình phi thần kinh nhỏ) để dự đoán k token tiếp theo. Điều này cực kỳ nhanh nhưng thường có tỷ lệ chấp nhận thấp hơn do sức mạnh dự đoán hạn chế của các mô hình n-gram so với mạng thần kinh. Nó đóng vai trò là nền tảng khái niệm ban đầu cho giải mã suy đoán dựa trên thần kinh tiên tiến hơn.

Tích hợp và cấu hình vLLM

vLLM, nổi tiếng với khả năng phục vụ LLM thông lượng cao, cung cấp hỗ trợ mạnh mẽ cho giải mã suy đoán. Nó trừu tượng hóa phần lớn sự phức tạp, cho phép người dùng bật nó bằng một vài đối số dòng lệnh hoặc tham số API.

Bật giải mã suy đoán trong vLLM

Để bật giải mã suy đoán, bạn cần chỉ định cả mô hình mục tiêu và mô hình nháp. vLLM xử lý việc tải, quản lý và điều phối suy luận cho cả hai.

Các tham số chính:

  • --model: Đường dẫn hoặc tên của LLM mục tiêu.
  • --speculative-model: Đường dẫn hoặc tên của LLM nháp.
  • --num-speculative-tokens: Số lượng token tối đa mà mô hình nháp sẽ tạo trong một bước suy đoán. Điều này tương ứng với k. Giá trị cao hơn có thể dẫn đến nhiều token được xác minh hơn trên mỗi bước nhưng cũng làm tăng khả năng bị từ chối sớm nếu mô hình nháp không đủ chính xác.
  • --draft-model-tp-size: Kích thước song song tensor cho mô hình nháp.
  • --target-model-tp-size: Kích thước song song tensor cho mô hình mục tiêu.

Ví dụ: Chạy vLLM với giải mã suy đoán

Hãy trình bày cách khởi chạy vLLM với Llama-3-70B làm mục tiêu và Llama-3-8B làm mô hình nháp. Điều này giả định bạn có quyền truy cập vào các mô hình này (ví dụ: từ Hugging Face Hub) và đủ tài nguyên GPU.

1. Cài đặt vLLM:

pip install vllm

2. Khởi chạy vLLM không có giải mã suy đoán (Baseline):

python -m vllm.entrypoints.api_server \
    --model meta-llama/Meta-Llama-3-70B-Instruct \
    --tensor-parallel-size 2 \
    --port 8000

Lưu ý: Llama-3-70B thường yêu cầu ít nhất 2x A100 80GB GPU cho độ chính xác đầy đủ, hoặc 1x A100 80GB với lượng tử hóa (ví dụ: AWQ, GPTQ).

3. Khởi chạy vLLM với giải mã suy đoán (Llama-3-8B Draft):

python -m vllm.entrypoints.api_server \
    --model meta-llama/Meta-Llama-3-70B-Instruct \
    --speculative-model meta-llama/Meta-Llama-3-8B-Instruct \
    --num-speculative-tokens 8 \
    --tensor-parallel-size 2 \
    --draft-model-tp-size 1 \
    --port 8001

Trong cấu hình này:

  • --model meta-llama/Meta-Llama-3-70B-Instruct: Chỉ định mô hình mục tiêu.
  • --speculative-model meta-llama/Meta-Llama-3-8B-Instruct: Chỉ định mô hình nháp.
  • --num-speculative-tokens 8: Mô hình nháp sẽ cố gắng tạo ra tối đa 8 token một cách suy đoán.
  • --tensor-parallel-size 2: Mô hình mục tiêu (70B) được phân chia trên 2 GPU.
  • --draft-model-tp-size 1: Mô hình nháp (8B) chạy trên một GPU duy nhất. vLLM đặt mô hình nháp một cách thông minh trên một trong các GPU có sẵn, có thể chia sẻ với một phần của mô hình mục tiêu nếu bộ nhớ cho phép, hoặc sử dụng một GPU chuyên dụng.

4. Khởi chạy vLLM với giải mã suy đoán (Eagle-7B Draft):

python -m vllm.entrypoints.api_server \
    --model meta-llama/Meta-Llama-3-70B-Instruct \
    --speculative-model google/gemma-2b-it-eagle \
    --num-speculative-tokens 12 \
    --tensor-parallel-size 2 \
    --draft-model-tp-size 1 \
    --port 8002

Ở đây, chúng ta sử dụng google/gemma-2b-it-eagle làm ví dụ về mô hình nháp kiểu Eagle. Lưu ý rằng num-speculative-tokens có thể cao hơn đối với các mô hình Eagle do bản chất tối ưu hóa của chúng và tỷ lệ chấp nhận dự kiến cao hơn.

Ví dụ suy luận phía máy khách

Để tương tác với các máy chủ này, bạn có thể sử dụng máy khách Python của vLLM:

from openai import OpenAI

# Client for baseline (no speculative decoding)
client_baseline = OpenAI(api_key="EMPTY", base_url="http://localhost:8000/v1")

# Client for speculative decoding with Llama-3-8B draft
client_spec_llama = OpenAI(api_key="EMPTY", base_url="http://localhost:8001/v1")

# Client for speculative decoding with Eagle-7B draft
client_spec_eagle = OpenAI(api_key="EMPTY", base_url="http://localhost:8002/v1")

def generate_text(client, prompt, max_tokens=128):
    chat_completion = client.chat.completions.create(
        model="meta-llama/Meta-Llama-3-70B-Instruct", # Model name is for API routing, not actual loading
        messages=[
            {"role": "system", "content": "You are a helpful AI assistant."},
            {"role": "user", "content": prompt}
        ],
        max_tokens=max_tokens,
        temperature=0.7,
        stream=False
    )
    return chat_completion.choices[0].message.content

prompt = "Explain the concept of quantum entanglement in simple terms."

print("--- Baseline Inference ---")
response_baseline = generate_text(client_baseline, prompt)
print(response_baseline)

print("\n--- Speculative Inference (Llama-3-8B Draft) ---")
response_spec_llama = generate_text(client_spec_llama, prompt)
print(response_spec_llama)

print("\n--- Speculative Inference (Eagle-7B Draft) ---")
response_spec_eagle = generate_text(client_spec_eagle, prompt)
print(response_spec_eagle)
Advertisement

Phân tích hiệu suất và điểm chuẩn

Để định lượng lợi ích của giải mã suy đoán, việc đánh giá điểm chuẩn nghiêm ngặt là rất cần thiết. Chúng ta sẽ so sánh thông lượng, độ trễ và việc sử dụng tài nguyên trên các cấu hình khác nhau.

Phương pháp đánh giá điểm chuẩn: Chúng tôi mô phỏng một khối lượng công việc sản xuất điển hình bằng cách sử dụng vllm.benchmarks.benchmark_throughput. Công cụ này cho phép chúng tôi đo số token mỗi giây (thông lượng), độ trễ token đầu tiên (FTL) và tổng độ trễ trong các điều kiện tải khác nhau.

Cấu hình phần cứng:

  • GPU: 2x NVIDIA A100 80GB (cho mô hình mục tiêu Llama-3-70B)
  • CPU: Intel Xeon Platinum 8380 (2.3 GHz, 80 lõi)
  • RAM: 512GB
  • Phiên bản vLLM: 0.4.0 (hoặc mới hơn)

Các kịch bản điểm chuẩn:

  1. Baseline: Llama-3-70B-Instruct (không có giải mã suy đoán).
  2. Suy đoán (Llama-3-8B Draft): Llama-3-70B-Instruct + Llama-3-8B-Instruct draft (--num-speculative-tokens 8).
  3. Suy đoán (Eagle-7B Draft): Llama-3-70B-Instruct + google/gemma-2b-it-eagle draft (--num-speculative-tokens 12).

Các chỉ số được thu thập:

  • Thông lượng (token/s): Số lượng token đầu ra trung bình được tạo mỗi giây.
  • Độ trễ token đầu tiên (ms): Thời gian cần thiết để tạo token đầu ra đầu tiên.
  • Tổng độ trễ (ms cho 128 token): Thời gian cần thiết để tạo một chuỗi đầy đủ 128 token.
  • Sử dụng bộ nhớ GPU (GB): Tổng VRAM được tiêu thụ bởi tất cả các mô hình.
  • Tỷ lệ chấp nhận (%): Tỷ lệ phần trăm trung bình các token nháp được mô hình mục tiêu chấp nhận.

Kết quả điểm chuẩn

Tính năng / Chỉ sốLlama-3-70B (Baseline)Llama-3-70B + Llama-3-8B (Suy đoán)Llama-3-70B + Eagle-7B (Suy đoán)
Thông lượng (token/s)28.578.295.1
Cải thiện thông lượng1.0x2.74x3.34x
Độ trễ token đầu tiên (ms)360410435
Tổng độ trễ (128 token, ms)500018001550
Bộ nhớ GPU (GB)70.5 (2x A100)80.0 (2x A100)83.0 (2x A100)
Tỷ lệ chấp nhận (%)N/A72%88%
Kích thước mô hình nhápN/A8B tham số2B tham số (Eagle)
--num-speculative-tokensN/A812

Lưu ý: Các chỉ số này mang tính minh họa và dựa trên hiệu suất điển hình được quan sát trong các thiết lập tương tự. Các con số thực tế có thể thay đổi tùy thuộc vào phần cứng cụ thể, phiên bản vLLM, lượng tử hóa mô hình và đặc điểm khối lượng công việc.

Phân tích kết quả

  1. Thông lượng: Giải mã suy đoán mang lại những cải thiện đáng kể về thông lượng. Sử dụng Llama-3-8B làm mô hình nháp gần như tăng gấp ba lần thông lượng (2.74x), trong khi mô hình nháp Eagle-7B chuyên dụng đẩy nó lên hơn 3.3x so với baseline. Điều này trực tiếp chuyển thành việc phục vụ nhiều yêu cầu hơn mỗi giây hoặc xử lý các chuỗi dài hơn nhanh hơn.
  2. Độ trễ:
    • Độ trễ token đầu tiên (FTL): Có một sự gia tăng nhẹ về FTL với giải mã suy đoán. Điều này là điều được mong đợi, vì thiết lập ban đầu liên quan đến việc tải và điều phối hai mô hình, và lần chạy suy đoán đầu tiên có thể mất nhiều thời gian hơn một chút so với một lần chạy mô hình mục tiêu duy nhất. Tuy nhiên, sự gia tăng này thường không đáng kể trong bối cảnh tổng thời gian tạo cho các chuỗi dài hơn.
    • Tổng độ trễ: Đối với các chuỗi dài hơn (ví dụ: 128 token), tổng độ trễ giảm đáng kể. Cơ chế xác minh song song giảm đáng kể thời gian tích lũy dành cho việc tạo token tuần tự.
  3. Bộ nhớ GPU: Giải mã suy đoán vốn dĩ yêu cầu nhiều bộ nhớ GPU hơn vì hai mô hình (mục tiêu và nháp) phải được tải đồng thời. Đối với Llama-3-70B, vốn đã tiêu thụ một phần đáng kể của A100 80GB, việc thêm một mô hình nháp 8B hoặc 2B đẩy tổng yêu cầu bộ nhớ lên. Điều này thường đòi hỏi các thiết lập đa GPU hoặc các chiến lược lượng tử hóa mạnh mẽ.
  4. Tỷ lệ chấp nhận: Tỷ lệ chấp nhận là một chỉ số quan trọng. Tỷ lệ chấp nhận cao hơn có nghĩa là nhiều token nháp được xác minh và chấp nhận hơn, dẫn đến ít bước lấy mẫu lại hơn và hiệu quả cao hơn. Eagle-7B cho thấy tỷ lệ chấp nhận cao hơn đáng kể (88%) so với Llama-3-8B (72%), làm nổi bật lợi ích của các mô hình nháp được xây dựng có mục đích. Tham số num-speculative-tokens nên được điều chỉnh cùng với tỷ lệ chấp nhận của mô hình nháp. Giá trị quá cao với tỷ lệ chấp nhận thấp có thể phản tác dụng.

TensorRT-LLM và giải mã suy đoán

Trong khi vLLM cung cấp một giao diện cấp cao, thân thiện với người dùng cho giải mã suy đoán, TensorRT-LLM của NVIDIA cung cấp một mức độ tối ưu hóa sâu hơn, đặc biệt cho GPU NVIDIA. TensorRT-LLM biên dịch LLM thành các công cụ suy luận được tối ưu hóa cao, thường mang lại hiệu suất vượt trội.

TensorRT-LLM cũng hỗ trợ giải mã suy đoán, thường đạt được thông lượng cao hơn và độ trễ thấp hơn so với các framework chỉ dựa vào PyTorch hoặc các backend đa năng khác. Nó tận dụng các kernel CUDA tùy chỉnh và các tối ưu hóa dành riêng cho phần cứng cho cả forward pass của mô hình nháp và mục tiêu, cũng như logic xác minh.

Đối với các yêu cầu hiệu suất cực cao trong sản xuất, đặc biệt với phần cứng NVIDIA, việc tích hợp TensorRT-LLM (trực tiếp hoặc thông qua các framework sử dụng nó làm backend) cho giải mã suy đoán có thể mang lại những lợi ích bổ sung ngoài những gì vLLM một mình cung cấp. Bản thân vLLM có thể tích hợp với TensorRT-LLM cho một số mô hình nhất định, kết hợp sự dễ sử dụng của vLLM với hiệu suất thô của TensorRT.

Những lỗi thường gặp & Cạm bẫy sản xuất

Triển khai giải mã suy đoán trong sản xuất đòi hỏi phải xem xét cẩn thận một số yếu tố để đảm bảo sự ổn định, hiệu suất và hiệu quả chi phí.

1. Lựa chọn và không khớp mô hình nháp

  • Lỗi thường gặp: Sử dụng một mô hình nháp quá nhỏ, được huấn luyện kém hoặc có kiến trúc không giống với mô hình mục tiêu. Điều này dẫn đến tỷ lệ chấp nhận thấp, làm mất đi lợi ích hiệu suất và có khả năng làm tăng độ trễ do lấy mẫu lại thường xuyên.
  • Cạm bẫy: Chọn bừa một mô hình nhỏ hơn làm nháp.
  • Giảm thiểu:
    • Căn chỉnh kiến trúc: Lý tưởng nhất, mô hình nháp nên là một phiên bản nhỏ hơn của mô hình mục tiêu (ví dụ: Llama-3-8B cho Llama-3-70B) hoặc một mô hình được thiết kế đặc biệt cho suy đoán (ví dụ: Eagle).
    • Căn chỉnh miền: Đảm bảo mô hình nháp được huấn luyện trên dữ liệu tương tự hoặc được tinh chỉnh cho cùng miền với mô hình mục tiêu để duy trì tỷ lệ chấp nhận cao.
    • Đánh giá điểm chuẩn: Đánh giá điểm chuẩn kỹ lưỡng các mô hình nháp khác nhau với mô hình mục tiêu và khối lượng công việc cụ thể của bạn để tìm sự cân bằng tối ưu giữa tốc độ mô hình nháp và tỷ lệ chấp nhận.

2. Chi phí bộ nhớ GPU

  • Lỗi thường gặp: Đánh giá thấp yêu cầu bộ nhớ GPU kết hợp của việc chạy hai mô hình đồng thời. Điều này có thể dẫn đến lỗi hết bộ nhớ (OOM), giảm kích thước batch hoặc yêu cầu phần cứng đắt tiền hơn.
  • Cạm bẫy: Giả định rằng dung lượng bộ nhớ của mô hình nháp là không đáng kể.
  • Giảm thiểu:
    • Lượng tử hóa: Áp dụng lượng tử hóa (ví dụ: AWQ, GPTQ, FP8) cho cả mô hình mục tiêu và nháp để giảm dung lượng bộ nhớ của chúng. vLLM hỗ trợ nhiều lược đồ lượng tử hóa khác nhau.
    • Phân chia mô hình (Tensor Parallelism): Phân phối mô hình mục tiêu trên nhiều GPU. Mô hình nháp thường có thể chạy trên một GPU duy nhất, có thể chia sẻ với một phần của mô hình mục tiêu nếu bộ nhớ cho phép.
    • Phân bổ bộ nhớ động: Theo dõi chặt chẽ việc sử dụng bộ nhớ GPU trong quá trình phát triển và thử nghiệm. Điều chỉnh kích thước batch hoặc xem xét các GPU lớn hơn nếu cần.

3. Điều chỉnh num-speculative-tokens

  • Lỗi thường gặp: Đặt num-speculative-tokens quá cao hoặc quá thấp mà không có xác thực thực nghiệm.
  • Cạm bẫy: Giá trị quá cao có thể dẫn đến nhiều token bị từ chối, lãng phí tính toán. Giá trị quá thấp có thể không khai thác hết khả năng song song.
  • Giảm thiểu:
    • Điều chỉnh thực nghiệm: Tham số này phụ thuộc rất nhiều vào chất lượng của mô hình nháp và đặc điểm của mô hình mục tiêu. Đánh giá điểm chuẩn các giá trị khác nhau (ví dụ: 4, 8, 12, 16) để tìm điểm tối ưu giúp tối đa hóa thông lượng cho thiết lập cụ thể của bạn.
    • Theo dõi tỷ lệ chấp nhận: Giá trị num-speculative-tokens tốt sẽ dẫn đến tỷ lệ chấp nhận cao (ví dụ: >70-80%) trong khi vẫn mang lại tốc độ đáng kể.

4. Tương tác với batching động

  • Lỗi thường gặp: Giải mã suy đoán làm tăng độ phức tạp cho batching động, đặc biệt khi các yêu cầu có độ dài prompt và đầu ra khác nhau.
  • Cạm bẫy: Các chiến lược batching không tối ưu có thể làm giảm hiệu quả của giải mã suy đoán.
  • Giảm thiểu:
    • PagedAttention và batching động của vLLM được thiết kế để hoạt động với giải mã suy đoán. Hãy tin tưởng vào các tối ưu hóa của framework, nhưng hãy lưu ý rằng các mẫu yêu cầu cực kỳ đa dạng vẫn có thể thách thức hệ thống.
    • Xem xét các chiến lược xếp hàng và lập lịch yêu cầu để nhóm các yêu cầu tương tự khi có thể, tối đa hóa việc sử dụng batch.

5. Độ trễ khởi động lạnh

  • Lỗi thường gặp: Tăng độ trễ khởi động lạnh do tải hai mô hình thay vì một.
  • Cạm bẫy: Không tính đến thời gian tải ban đầu trong môi trường serverless hoặc tự động mở rộng.
  • Giảm thiểu:
    • Khởi động trước: Triển khai các chiến lược khởi động trước cho các điểm cuối suy luận của bạn.
    • Các phiên bản liên tục: Đối với các dịch vụ có lưu lượng truy cập cao, duy trì các phiên bản liên tục để tránh khởi động lạnh.
    • Tải tối ưu hóa: Đảm bảo các mô hình được lưu trữ trên bộ nhớ nhanh (ví dụ: NVMe SSD) để giảm thiểu thời gian tải.

6. Giám sát và khả năng quan sát

  • Lỗi thường gặp: Thiếu các chỉ số cụ thể để giám sát hiệu suất giải mã suy đoán trong sản xuất.
  • Cạm bẫy: Chỉ giám sát thông lượng tổng thể, bỏ lỡ thông tin chi tiết về hiệu quả của quá trình suy đoán.
  • Giảm thiểu:
    • Các chỉ số chính: Giám sát tỷ lệ chấp nhận
Share this article:

Stay Updated

Get the latest posts delivered straight to your inbox.

Free Developer Utilities

Free In-Browser Developer Tools

Clean AI CLI logs, build cron expressions, decode JWTs, and calculate chmod permissions offline.

Explore Tools
Advertisement