# Sinh

Mỗi framework có một phương thức generate để tạo văn bản được triển khai trong lớp `GenerationMixin` tương ứng của chúng:

- PyTorch [generate()](/docs/transformers/main/vi/main_classes/text_generation#transformers.GenerationMixin.generate) được triển khai trong [GenerationMixin](/docs/transformers/main/vi/main_classes/text_generation#transformers.GenerationMixin).

Bạn có thể tham số hóa phương thức generate bằng một instance của class [GenerationConfig](/docs/transformers/main/vi/main_classes/text_generation#transformers.GenerationConfig). Vui lòng tham khảo class này để biết danh sách đầy đủ các tham số sinh, những tham số này kiểm soát hành vi của phương thức sinh.

Để tìm hiểu cách kiểm tra cấu hình tạo văn bản của một mô hình, các giá trị mặc định là gì, cách thay đổi các tham số một cách tức thời, và cách tạo cũng như lưu một cấu hình tạo văn bản tùy chỉnh, hãy tham khảo [hướng dẫn chiến lược tạo văn bản](../generation_strategies). Hướng dẫn này cũng giải thích cách sử dụng các tính năng liên quan, chẳng hạn như truyền trực tiếp token.

## GenerationConfig[[transformers.GenerationConfig]]

#### transformers.GenerationConfig[[transformers.GenerationConfig]]

```python
transformers.GenerationConfig(**kwargs)
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/configuration_utils.py#L96)

**Các tham số kiểm soát độ dài của đầu ra:**

max_length (`int`, *tùy chọn*) : `max_new_tokens` được khuyến nghị để kiểm soát số lượng token mà mô hình tạo ra. `max_length` được giữ lại để đảm bảo tương thích ngược.

max_new_tokens (`int`, *tuỳ chọn*) : Số lượng token tối đa để tạo, bỏ qua số lượng token trong prompt.

min_length (`int`, *optional*) : Độ dài tối thiểu của chuỗi cần được tạo ra. Tương ứng với độ dài của prompt đầu vào + `min_new_tokens`. Hiệu ứng của nó sẽ bị ghi đè bởi `min_new_tokens`, nếu tham số đó cũng được đặt.

min_new_tokens (`int`, *tuỳ chọn*) : Số lượng token tối thiểu cần tạo, bỏ qua số lượng token trong prompt.

early_stopping (`bool` hoặc `str`, *không bắt buộc*) : Kiểm soát điều kiện dừng cho các phương pháp dựa trên beam, chẳng hạn như beam-search. Nó chấp nhận các giá trị sau: `True`, khi quá trình sinh dừng ngay khi có `num_beams` ứng viên hoàn chỉnh; `False`, khi một heuristic được áp dụng và quá trình sinh dừng khi khả năng tìm thấy các ứng viên tốt hơn là rất thấp; `"never"`, khi quy trình beam search chỉ dừng khi không thể có các ứng viên tốt hơn (thuật toán beam search chính tắc).

max_time (`float`, *optional*) : Thời gian tối đa (tính bằng giây) mà bạn cho phép phép tính chạy. Quá trình generation vẫn sẽ hoàn thành lượt xử lý hiện tại sau khi thời gian đã phân bổ hết.

stop_strings (`str` hoặc `list[str]`, *tùy chọn*) : Một chuỗi hoặc danh sách các chuỗi sẽ kết thúc quá trình sinh nếu mô hình xuất ra chúng.

**Các tham số kiểm soát chiến lược sinh được sử dụng:**

do_sample (`bool`) : Có sử dụng sampling hay không; nếu không thì dùng greedy decoding.

num_beams (`int`, *optional*) : Số lượng beam cho beam search. 1 có nghĩa là không sử dụng beam search.

use_mtp : (`bool`): Có sử dụng Multi-Token Prediction (MTP) hay không nếu mô hình hỗ trợ tính năng này.

**Các tham số kiểm soát bộ nhớ đệm:**

use_cache (`bool`) : Xác định xem mô hình có nên sử dụng các chú ý key/value cuối cùng trước đó (nếu áp dụng được cho mô hình) để tăng tốc giải mã hay không.

cache_implementation (`str`, *tùy chọn*) : Tên của lớp cache sẽ được khởi tạo trong `generate`, để giải mã nhanh hơn. Các giá trị có thể là:  - `"dynamic"`: [DynamicCache](/docs/transformers/main/vi/internal/generation_utils#transformers.DynamicCache) - `"static"`: [StaticCache](/docs/transformers/main/vi/internal/generation_utils#transformers.StaticCache) - `"offloaded"`: `DynamicCache(offloaded=True)` - `"offloaded_static"`: `StaticCache(offloaded=True)` - `"quantized"`: [QuantizedCache](/docs/transformers/main/vi/internal/generation_utils#transformers.QuantizedCache)  Nếu không chỉ định giá trị nào, chúng tôi sẽ sử dụng cache mặc định cho mô hình (thường là [DynamicCache](/docs/transformers/main/vi/internal/generation_utils#transformers.DynamicCache)). Xem [tài liệu về cache](https://huggingface.co/docs/transformers/en/kv_cache) của chúng tôi để biết thêm thông tin.

cache_config (`dict`, *tùy chọn*, mặc định là `None`) : Các đối số được sử dụng trong lớp bộ nhớ đệm key-value có thể được truyền vào `cache_config`.

max_cache_len (`int`, *optional*) : Chỉ được sử dụng với bộ nhớ đệm tĩnh (`cache_implementation` được đặt thành `"static"` hoặc `"offloaded_static"`). Đặt trước kích thước bộ nhớ đệm bằng độ dài này thay vì `max_length` của lần gọi hiện tại. Đặt nó một lần bằng kích thước lớn nhất của lần gọi mà bạn dự kiến, để các lần gọi `generate()` lặp lại với prompt dài hơn hoặc `max_new_tokens` lớn hơn (tới mức trần này) có thể tái sử dụng cùng một bộ nhớ đệm thay vì kích hoạt việc cấp phát lại bộ nhớ và biên dịch lại `torch.compile`.

**Các tham số để thao tác với logits đầu ra của mô hình:**

temperature (`float`, *tùy chọn*) : Giá trị được dùng để điều chỉnh xác suất của token tiếp theo. Giá trị này được đặt trong tệp `generation_config.json` của mô hình. Nếu không được đặt, giá trị mặc định là 1.0

top_k (`int`, *optional*) : Số lượng token từ vựng có xác suất cao nhất cần giữ lại cho top-k-filtering. Giá trị này được đặt trong tệp `generation_config.json` của mô hình. Nếu không được đặt, giá trị mặc định là 50.

top_p (`float`, *optional*) : Nếu được đặt thành float < 1, chỉ bộ nhỏ nhất gồm các token có xác suất cao nhất, với tổng xác suất bằng hoặc lớn hơn `top_p`, sẽ được giữ lại cho quá trình sinh. Giá trị này được đặt trong tệp `generation_config.json` của mô hình. Nếu không được đặt, giá trị mặc định là 1.0

min_p (`float`, *optional*) : Xác suất tối thiểu của token, sẽ được nhân với xác suất của token có khả năng cao nhất. Giá trị này phải nằm trong khoảng từ 0 đến 1. Các giá trị điển hình nằm trong khoảng 0.01-0.2, có mức độ chọn lọc tương đương với việc đặt `top_p` trong khoảng 0.99-0.8 (sử dụng giá trị `top_p` ngược lại so với thông thường).

top_h (`float`, *optional*) : Hệ số mở rộng ngân sách entropy, kiểm soát mức độ entropy của phân phối được giữ lại khi lấy mẫu. Phải là một giá trị từ 0 đến 1. Tại mỗi bước, các token được sắp xếp theo xác suất, và tiền tố nhỏ nhất của các token được giữ lại có entropy *chuẩn hóa lại* nhỏ hơn hoặc bằng `top_h` lần entropy của phân phối đầy đủ. Các giá trị nhỏ hơn (ví dụ: 0,2–0,5) dẫn đến đầu ra tập trung và tất định hơn, trong khi các giá trị gần 1,0 cho phép nhiều ngẫu nhiên và đa dạng hơn. Các giá trị điển hình nằm trong khoảng 0,3–0,6.

typical_p (`float`, *tuỳ chọn*) : Local typicality đo mức độ tương đồng giữa xác suất có điều kiện để dự đoán token đích tiếp theo và xác suất có điều kiện kỳ vọng để dự đoán một token ngẫu nhiên tiếp theo, dựa trên phần văn bản đã được tạo. Nếu đặt thành float < 1, tập hợp nhỏ nhất gồm các token có tính điển hình cục bộ cao nhất với tổng xác suất bằng hoặc lớn hơn `typical_p` sẽ được giữ lại cho quá trình tạo. Xem [bài báo này](https://huggingface.co/papers/2202.00666) để biết thêm chi tiết.

epsilon_cutoff (`float`, *optional*) : Nếu được đặt thành float nằm nghiêm ngặt giữa 0 và 1, chỉ các token có xác suất điều kiện lớn hơn `epsilon_cutoff` sẽ được lấy mẫu. Trong bài báo, các giá trị được đề xuất dao động từ 3e-4 đến 9e-4, tùy thuộc vào kích thước của mô hình. Xem [Truncation Sampling as Language Model Desmoothing](https://huggingface.co/papers/2210.15191) để biết thêm chi tiết.

eta_cutoff (`float`, *tùy chọn*) : Lấy mẫu Eta là sự kết hợp giữa lấy mẫu điển hình cục bộ và lấy mẫu epsilon. Nếu được đặt thành float nằm nghiêm ngặt giữa 0 và 1, một token chỉ được xem xét nếu nó lớn hơn `eta_cutoff` hoặc `sqrt(eta_cutoff) * exp(-entropy(softmax(next_token_logits)))`. Thuật ngữ sau này, về mặt trực quan, là xác suất của token tiếp theo được kỳ vọng, được nhân với `sqrt(eta_cutoff)`. Trong bài báo, các giá trị được đề xuất dao động từ 3e-4 đến 2e-3, tùy thuộc vào kích thước của mô hình. Xem [Truncation Sampling as Language Model Desmoothing](https://huggingface.co/papers/2210.15191) để biết thêm chi tiết.

repetition_penalty (`float`, *tùy chọn*) : Tham số cho hình phạt lặp lại. 1.0 có nghĩa là không có hình phạt. Xem [bài báo này](https://huggingface.co/papers/1909.05858) để biết thêm chi tiết.

encoder_repetition_penalty (`float`, *optional*) : Tham số cho encoder_repetition_penalty. Một hình phạt mũ áp dụng cho các chuỗi không có trong đầu vào gốc. 1.0 nghĩa là không có hình phạt.

length_penalty (`float`, *optional*) : Phạt mũ theo độ dài được sử dụng với sinh dựa trên beam. Nó được áp dụng dưới dạng mũ của độ dài chuỗi, sau đó dùng để chia điểm của chuỗi. Vì điểm là log likelihood của chuỗi (tức là âm), `length_penalty` > 0.0 khuyến khích các chuỗi dài hơn, trong khi `length_penalty` < 0.0 khuyến khích các chuỗi ngắn hơn.

no_repeat_ngram_size (`int`, *optional*) : Nếu được đặt thành int > 0, tất cả các ngram có kích thước đó chỉ có thể xuất hiện một lần.

bad_words_ids (`list[list[int]]`, *tùy chọn*) : Danh sách các danh sách id token không được phép tạo ra. Xem [NoBadWordsLogitsProcessor](/docs/transformers/main/vi/internal/generation_utils#transformers.NoBadWordsLogitsProcessor) để biết thêm tài liệu và ví dụ.

renormalize_logits (`bool`) : Có nên chuẩn hóa lại logits sau khi áp dụng tất cả các bộ xử lý logits (bao gồm cả các bộ tùy chỉnh) hay không. Rất khuyến nghị đặt cờ này thành `True` vì các thuật toán tìm kiếm giả định rằng các logits điểm đã được chuẩn hóa, nhưng một số bộ xử lý logits có thể làm hỏng sự chuẩn hóa đó.

forced_bos_token_id (`int`, *tuỳ chọn*, mặc định là `model.config.forced_bos_token_id`) : id của token được ép buộc làm token đầu tiên được tạo ra sau `decoder_start_token_id`. Hữu ích cho các mô hình đa ngôn ngữ như [mBART](../model_doc/mbart), nơi token đầu tiên được tạo ra cần phải là token của ngôn ngữ đích.

forced_eos_token_id (`int` or list[int]`, *optional*, defaults to `model.config.forced_eos_token_id`) : The id of the token to force as the last generated token when `max_length` is reached. Optionally, use a list to set multiple *end-of-sequence* tokens.

remove_invalid_values (`bool`) : Có nên loại bỏ các đầu ra *nan* và *inf* có thể xảy ra của mô hình để ngăn phương pháp sinh bị lỗi hay không. Lưu ý rằng việc sử dụng `remove_invalid_values` có thể làm chậm quá trình sinh.

exponential_decay_length_penalty (`tuple(int, float)`, *optional*) : Tuple này thêm một hình phạt độ dài tăng theo hàm mũ sau khi một số lượng token nhất định đã được tạo ra. Tuple phải bao gồm: `(start_index, decay_factor)` trong đó `start_index` chỉ định vị trí bắt đầu của hình phạt và `decay_factor` đại diện cho hệ số suy giảm theo hàm mũ

suppress_tokens (`list[int]`, *optional*) : Một danh sách các token sẽ bị loại bỏ khi sinh. Bộ xử lý logit `SuppressTokens` sẽ đặt log prob của chúng thành `-inf` để chúng không được lấy mẫu.

begin_suppress_tokens  (`list[int]`, *optional*) : Một danh sách các token sẽ bị chặn ở đầu quá trình sinh. Bộ xử lý logit `SuppressBeginTokens` sẽ đặt log probs của chúng thành `-inf` để chúng không được lấy mẫu.

sequence_bias (`dict[tuple[int], float]`, *tùy chọn*)) : Từ điển ánh xạ một chuỗi token đến số hạng bias của nó. Các bias dương làm tăng khả năng chuỗi được chọn, trong khi các bias âm thì ngược lại. Xem [SequenceBiasLogitsProcessor](/docs/transformers/main/vi/internal/generation_utils#transformers.SequenceBiasLogitsProcessor) để biết thêm tài liệu và ví dụ.

token_healing (`bool`) : Chữa các token cuối của prompt bằng cách thay thế chúng bằng phần mở rộng phù hợp. Điều này nâng cao chất lượng của các câu trả lời cho những prompt bị ảnh hưởng bởi thiên kiến token hóa tham lam.

guidance_scale (`float`, *optional*) : Thang độ dẫn hướng cho classifier free guidance (CFG). CFG được kích hoạt bằng cách đặt `guidance_scale > 1`. Thang độ dẫn hướng cao hơn khuyến khích mô hình tạo ra các mẫu gắn kết chặt chẽ hơn với prompt đầu vào, thường phải đánh đổi bằng chất lượng kém hơn.

watermarking_config (`BaseWatermarkingConfig` hoặc `dict`, *tùy chọn*) : Các đối số được sử dụng để thêm dấu nước vào đầu ra của mô hình bằng cách thêm một độ lệch nhỏ vào một tập hợp các token "xanh" được chọn ngẫu nhiên. Xem tài liệu của [SynthIDTextWatermarkingConfig](/docs/transformers/main/vi/internal/generation_utils#transformers.SynthIDTextWatermarkingConfig) và [WatermarkingConfig](/docs/transformers/main/vi/internal/generation_utils#transformers.WatermarkingConfig) để biết thêm chi tiết. Nếu được truyền dưới dạng `Dict`, nó sẽ được chuyển đổi thành `WatermarkingConfig` bên trong.

**Các tham số xác định các biến đầu ra của generate:**

num_return_sequences (`int`, *tuỳ chọn*) : Số lượng các chuỗi trả về được tính toán độc lập cho mỗi phần tử trong lô.

output_attentions (`bool`) : Có hoặc không trả về các tensor chú ý của tất cả các lớp chú ý. Xem `attentions` trong các tensor được trả về để biết thêm chi tiết.

output_hidden_states (`bool`) : Có hoặc không trả về trạng thái ẩn (hidden states) của tất cả các lớp. Xem `hidden_states` trong phần tensor trả về để biết thêm chi tiết.

output_scores (`bool`) : Có hoặc không trả về điểm dự đoán. Xem `scores` dưới các tensor được trả về để biết thêm chi tiết.

output_logits (`bool`) : Có hoặc không trả về điểm logit dự đoán chưa được xử lý. Xem `logits` dưới các tensor được trả về để biết thêm chi tiết.

return_dict_in_generate (`bool`) : Xác định có trả về một [ModelOutput](/docs/transformers/main/vi/main_classes/output#transformers.utils.ModelOutput) hay không, thay vì chỉ trả về chuỗi được tạo ra. Cờ này phải được đặt thành `True` để trả về bộ nhớ đệm sinh (khi `use_cache` là `True`) hoặc các đầu ra tùy chọn (xem các cờ bắt đầu bằng `output_`)

**Các token đặc biệt có thể được sử dụng khi tạo sinh:**

pad_token_id (`int`, *tùy chọn*) : id của token *padding*.

bos_token_id (`int`, *tuỳ chọn*) : id của token *beginning-of-sequence*.

eos_token_id (`Union[int, list[int]]`, *tùy chọn*) : id của token *kết thúc chuỗi*. Tùy chọn, sử dụng danh sách để đặt nhiều token *kết thúc chuỗi*.

**Các tham số sinh chỉ dành cho các mô hình encoder-decoder:**

encoder_no_repeat_ngram_size (`int`, *optional*) : Nếu được đặt thành int > 0, tất cả các ngram có kích thước đó xuất hiện trong `encoder_input_ids` sẽ không được phép xuất hiện trong `decoder_input_ids`.

decoder_start_token_id (`int` hoặc `list[int]`, *tuỳ chọn*) : Nếu một mô hình encoder-decoder bắt đầu giải mã bằng một token khác với *bos*, đây là id của token đó hoặc một danh sách có độ dài `batch_size`. Việc chỉ định một danh sách cho phép sử dụng các id bắt đầu khác nhau cho từng phần tử trong batch (ví dụ: các mô hình đa ngôn ngữ với các ngôn ngữ đích khác nhau trong cùng một batch)

**Tham số sinh chỉ dành riêng cho việc sinh của trợ lý:**

is_assistant (`bool`) : Xác định xem mô hình có phải là mô hình trợ lý (draft) hay không.

num_assistant_tokens (`int`, *optional*) : Xác định số lượng _speculative tokens_ mà mô hình trợ lý sẽ tạo ra trước khi được kiểm tra bởi mô hình đích ở mỗi lần lặp. Các giá trị cao hơn cho `num_assistant_tokens` khiến quá trình tạo ra mang tính _speculative_ hơn: Nếu mô hình trợ lý hoạt động hiệu quả, tốc độ có thể được tăng lên đáng kể; nếu mô hình trợ lý cần nhiều lần sửa lỗi, tốc độ tăng sẽ thấp hơn.

num_assistant_tokens_schedule (`str`, *tùy chọn*) : Xác định lịch trình mà theo đó số lượng token trợ lý tối đa sẽ được thay đổi trong quá trình suy luận. - `"heuristic"`: Khi tất cả các token suy đoán đều chính xác, tăng `num_assistant_tokens` lên 2, ngược lại giảm đi 1. Giá trị của `num_assistant_tokens` được giữ nguyên qua nhiều lần gọi sinh với cùng một mô hình trợ lý. - `"heuristic_transient"`: Tương tự như `"heuristic"` nhưng `num_assistant_tokens` sẽ được đặt lại về giá trị ban đầu sau mỗi lần gọi sinh. - `"constant"`: `num_assistant_tokens` không thay đổi trong quá trình sinh

assistant_confidence_threshold (`float`, *optional*) : Ngưỡng độ tin cậy cho mô hình trợ lý. Nếu độ tin cậy của mô hình trợ lý đối với dự đoán cho token hiện tại thấp hơn ngưỡng này, mô hình trợ lý sẽ dừng vòng lặp tạo token hiện tại, ngay cả khi số lượng _speculative tokens_ (được định nghĩa bởi `num_assistant_tokens`) chưa đạt đến. Ngưỡng độ tin cậy của trợ lý được điều chỉnh trong suốt các vòng lặp suy đoán để giảm số lần forward pass không cần thiết của draft và target, với xu hướng tránh âm tính giả. Giá trị `assistant_confidence_threshold` được duy trì qua nhiều lần gọi tạo với cùng một mô hình trợ lý. Đây là phiên bản không giám sát của dynamic speculation lookahead từ Dynamic Speculation Lookahead Accelerates Speculative Decoding of Large Language Models .

prompt_lookup_num_tokens (`int`, *tùy chọn*) : Số lượng token cần được xuất ra dưới dạng các token ứng viên.

max_matching_ngram_size (`int`, *optional*) : Kích thước ngram tối đa được xem xét để khớp trong prompt. Mặc định là 2 nếu không được cung cấp.

assistant_early_exit(`int`, *optional*) : Nếu được đặt thành một số nguyên dương, early exit của mô hình sẽ được sử dụng như một trợ lý. Chỉ có thể được sử dụng với các mô hình hỗ trợ early exit (tức là các mô hình mà logits từ các lớp trung gian có thể được giải thích bởi LM head).

assistant_lookbehind(`int`, *optional*) : Nếu được đặt thành một số nguyên dương, quá trình mã hóa lại sẽ xem xét thêm `assistant_lookbehind` token assistant cuối cùng để căn chỉnh token chính xác. Chỉ có thể được sử dụng với các tokenizer khác nhau trong speculative decoding. Xem [blog](https://huggingface.co/blog/universal_assisted_generation) này để biết thêm chi tiết.

target_lookbehind(`int`, *optional*) : Nếu được đặt thành một số nguyên dương, quá trình mã hóa lại sẽ xem xét thêm `target_lookbehind` token target cuối cùng để căn chỉnh token chính xác. Chỉ có thể được sử dụng với các tokenizer khác nhau trong speculative decoding. Xem [blog](https://huggingface.co/blog/universal_assisted_generation) này để biết thêm chi tiết.

assistant_ensemble_weight (`float`, *optional*) : Bật xác minh tập hợp tĩnh trong giải mã suy đoán. Nếu được đặt thành một giá trị trong `(0.0, 1.0)`, bộ xác minh sẽ chấp nhận các token dựa trên hỗn hợp `w * p_target + (1 - w) * q_draft` thay vì `p_target`, đánh đổi một độ chệch phân phối có kiểm soát để đạt tỷ lệ chấp nhận cao hơn. Mặc định là `None`, giúp giữ cho quá trình giải mã không mất mát. Yêu cầu mô hình trợ lý phải trả về logits, do đó không tương thích với giải mã tra cứu prompt.

speculation_type (`str`, *tùy chọn*) : Kiểu suy đoán được yêu cầu. Các giá trị được chấp nhận là `dflash`.

**Các tham số liên quan đến hiệu năng và biên dịch:**

compile_config (CompileConfig, *tùy chọn*) : Nếu sử dụng cache có thể biên dịch, tham số này kiểm soát cách `generate` sẽ `compile` bước truyền thẳng (forward pass) để suy luận nhanh hơn.

disable_compile (`bool`) : Xác định có vô hiệu hóa việc biên dịch tự động của bước truyền tiến hay không. Việc biên dịch tự động diễn ra khi đáp ứng các tiêu chí cụ thể, bao gồm việc sử dụng bộ nhớ đệm có thể biên dịch. Vui lòng mở một issue nếu bạn thấy cần sử dụng cờ này.

Lớp chứa cấu hình cho một tác vụ sinh. Một lời gọi `generate` hỗ trợ các phương pháp sinh sau cho các mô hình text-decoder, text-to-text, speech-to-text và vision-to-text:

- *giải mã tham lam* nếu `num_beams=1` và `do_sample=False`
- *mẫu đa thức* nếu `num_beams=1` và `do_sample=True`
- *giải mã beam-search* nếu `num_beams>1` và `do_sample=False`
- *mẫu đa thức beam-search* nếu `num_beams>1` và `do_sample=True`
- *giải mã có hỗ trợ* nếu `assistant_model` hoặc `prompt_lookup_num_tokens` được truyền vào `.generate()`

Để tìm hiểu thêm về các chiến lược giải mã, hãy tham khảo [hướng dẫn chiến lược tạo văn bản](../generation_strategies).

Một số lượng lớn các cờ này kiểm soát logits hoặc tiêu chí dừng của quá trình sinh. Hãy đảm bảo bạn kiểm tra [các lớp liên quan đến generate](https://huggingface.co/docs/transformers/internal/generation_utils) để có mô tả đầy đủ về các thao tác có thể thực hiện, cũng như các ví dụ về cách sử dụng chúng.

Lưu ý: các trường cấu hình vẫn còn `None` sẽ bị ghi đè bởi `GenerationConfig._get_default_generation_params()` trong vòng lặp sinh. Nếu bạn muốn sử dụng các giá trị khác cho những trường này, hãy đảm bảo thiết lập chúng một cách rõ ràng trong cấu hình sinh.

#### from_pretrained[[transformers.GenerationConfig.from_pretrained]]

```python
from_pretrained(pretrained_model_name: str | os.PathLike, config_file_name: str | os.PathLike | None = None, cache_dir: str | os.PathLike | None = None, force_download: bool = False, local_files_only: bool = False, token: str | bool | None = None, revision: str = 'main', **kwargs)
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/configuration_utils.py#L952)

**Tham số:**

pretrained_model_name (`str` hoặc `os.PathLike`) : Có thể là một trong các trường hợp sau:  - một chuỗi, *model id* của cấu hình mô hình được huấn luyện trước lưu trong kho mô hình trên huggingface.co. - đường dẫn đến một *thư mục* chứa tệp cấu hình đã được lưu bằng phương thức [save_pretrained()](/docs/transformers/main/vi/main_classes/text_generation#transformers.GenerationConfig.save_pretrained), ví dụ: `./my_model_directory/`.

config_file_name (`str` hoặc `os.PathLike`, *tùy chọn*, mặc định là `"generation_config.json"`) : Tên của tệp JSON cấu hình sinh cần được nạp từ `pretrained_model_name`.

cache_dir (`str` hoặc `os.PathLike`, *tùy chọn*) : Đường dẫn đến thư mục mà cấu hình mô hình được huấn luyện trước đã tải xuống sẽ được lưu vào bộ nhớ đệm nếu không sử dụng bộ nhớ đệm tiêu chuẩn.

force_download (`bool`, *tùy chọn*, mặc định là `False`) : Có nên buộc tải xuống (lại) các tệp cấu hình và ghi đè lên các phiên bản được lưu trong bộ nhớ đệm nếu chúng tồn tại hay không.

proxies (`dict[str, str]`, *tùy chọn*) : Một từ điển các máy chủ proxy để sử dụng theo giao thức hoặc điểm cuối, ví dụ: `{'http': 'foo.bar:3128', 'http://hostname': 'foo.bar:4012'}.` Các proxy được sử dụng cho mỗi yêu cầu.

token (`str` hoặc `bool`, *tùy chọn*) : Token được sử dụng làm HTTP bearer authorization cho các tệp từ xa. Nếu là `True`, hoặc không được chỉ định, sẽ sử dụng token được tạo khi chạy `hf auth login` (được lưu trong `~/.huggingface`).

revision (`str`, *tùy chọn*, mặc định là `"main"`) : Phiên bản mô hình cụ thể cần sử dụng. Nó có thể là tên nhánh, tên thẻ hoặc id commit, vì chúng tôi sử dụng hệ thống dựa trên git để lưu trữ các mô hình và các sản phẩm khác trên huggingface.co, do đó `revision` có thể là bất kỳ định danh nào được git cho phép.    Để kiểm tra một pull request bạn đã tạo trên Hub, bạn có thể truyền `revision="refs/pr/<pr_number>"`.

return_unused_kwargs (`bool`, *tuỳ chọn*, mặc định là `False`) : Nếu `False`, thì hàm này chỉ trả về đối tượng cấu hình cuối cùng. Nếu `True`, thì hàm này trả về một `Tuple(config, unused_kwargs)` trong đó *unused_kwargs* là một từ điển gồm các cặp khóa/giá trị mà khóa của chúng không phải là thuộc tính cấu hình: tức là phần của `kwargs` chưa được sử dụng để cập nhật `config` và bị bỏ qua.

subfolder (`str`, *tùy chọn*, mặc định là `""`) : Trong trường hợp các tệp liên quan nằm trong một thư mục con của kho mô hình trên huggingface.co, bạn có thể chỉ định tên thư mục ở đây.

kwargs (`dict[str, Any]`, *tùy chọn*) : Các giá trị trong kwargs của bất kỳ khóa nào là thuộc tính cấu hình sẽ được sử dụng để ghi đè lên các giá trị đã tải. Hành vi đối với các cặp khóa/giá trị mà khóa của chúng *không phải* là thuộc tính cấu hình được kiểm soát bởi tham số từ khóa `return_unused_kwargs`.

**Trả về:** [GenerationConfig](/docs/transformers/main/vi/main_classes/text_generation#transformers.GenerationConfig)

Đối tượng cấu hình được khởi tạo từ mô hình được huấn luyện trước này.

Tạo một [GenerationConfig](/docs/transformers/main/vi/main_classes/text_generation#transformers.GenerationConfig) từ tệp cấu hình sinh.

Ví dụ:

```python
>>> from transformers import GenerationConfig

>>> # Download configuration from huggingface.co and cache.
>>> generation_config = GenerationConfig.from_pretrained("openai-community/gpt2")

>>> # E.g. config was saved using *save_pretrained('./test/saved_model/')*
>>> generation_config.save_pretrained("./test/saved_model/")
>>> generation_config = GenerationConfig.from_pretrained("./test/saved_model/")

>>> # You can also specify configuration names to your generation configuration file
>>> generation_config.save_pretrained("./test/saved_model/", config_file_name="my_configuration.json")
>>> generation_config = GenerationConfig.from_pretrained("./test/saved_model/", "my_configuration.json")

>>> # If you'd like to try a minor variation to an existing configuration, you can also pass generation
>>> # arguments to `.from_pretrained()`. Be mindful that typos and unused arguments will be ignored
>>> generation_config, unused_kwargs = GenerationConfig.from_pretrained(
...     "openai-community/gpt2", top_k=1, foo=False, do_sample=True, return_unused_kwargs=True
... )
>>> generation_config.top_k
1

>>> unused_kwargs
{'foo': False}
```

#### from_model_config[[transformers.GenerationConfig.from_model_config]]

```python
from_model_config(model_config: typing.Union[ForwardRef('PreTrainedConfig'), dict])
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/configuration_utils.py#L1290)

**Tham số:**

model_config (`PreTrainedConfig | dict`) : Cấu hình mô hình sẽ được sử dụng để khởi tạo cấu hình sinh.

**Trả về:** [GenerationConfig](/docs/transformers/main/vi/main_classes/text_generation#transformers.GenerationConfig)

Đối tượng cấu hình được khởi tạo từ các tham số đó.

Tạo một [GenerationConfig](/docs/transformers/main/vi/main_classes/text_generation#transformers.GenerationConfig) từ một [PreTrainedConfig](/docs/transformers/main/vi/main_classes/configuration#transformers.PreTrainedConfig). Hàm này hữu ích để chuyển đổi các đối tượng [PreTrainedConfig](/docs/transformers/main/vi/main_classes/configuration#transformers.PreTrainedConfig) cũ, có thể chứa các tham số sinh, thành một [GenerationConfig](/docs/transformers/main/vi/main_classes/text_generation#transformers.GenerationConfig) độc lập.

#### save_pretrained[[transformers.GenerationConfig.save_pretrained]]

```python
save_pretrained(save_directory: str | os.PathLike, config_file_name: str | os.PathLike | None = None, push_to_hub: bool = False, **kwargs)
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/configuration_utils.py#L891)

**Tham số:**

save_directory (`str` hoặc `os.PathLike`) : Thư mục nơi tệp cấu hình JSON sẽ được lưu (sẽ được tạo nếu chưa tồn tại).

config_file_name (`str` hoặc `os.PathLike`, *tùy chọn*, mặc định là `"generation_config.json"`) : Tên của tệp JSON cấu hình sinh cần được lưu trong `save_directory`.

push_to_hub (`bool`, *tùy chọn*, mặc định là `False`) : Có đẩy mô hình của bạn lên Hugging Face model hub sau khi lưu hay không. Bạn có thể chỉ định kho lưu trữ muốn đẩy đến bằng `repo_id` (mặc định sẽ là tên của `save_directory` trong namespace của bạn).

kwargs (`dict[str, Any]`, *tùy chọn*) : Các đối số từ khóa bổ sung được truyền đến phương thức [push_to_hub()](/docs/transformers/main/vi/main_classes/model#transformers.utils.PushToHubMixin.push_to_hub).

Lưu đối tượng cấu hình sinh vào thư mục `save_directory` để có thể tải lại bằng phương thức lớp [from_pretrained()](/docs/transformers/main/vi/main_classes/text_generation#transformers.GenerationConfig.from_pretrained).

#### cập nhật[[transformers.GenerationConfig.update]]

```python
update(defaults_only = False, allow_custom_entries = False, **kwargs)
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/configuration_utils.py#L1340)

**Tham số:**

defaults_only (`bool`, *tùy chọn*, mặc định là `False`) : Xác định việc cập nhật tất cả các khóa trong config bằng `kwargs` hay chỉ những khóa được đặt là `None` (tức là giá trị mặc định).

allow_custom_entries (`bool`, *tùy chọn*, mặc định là `False`) : Cho phép cập nhật các mục tùy chỉnh vào cấu hình bằng `kwargs` nếu chúng không có trong cấu hình hiện tại hay không.

kwargs (`dict[str, Any]`) : Từ điển các thuộc tính để cập nhật tạm thời lớp này.

**Trả về:** `dict[str, Any]`

Từ điển chứa tất cả các cặp khóa-giá trị không được sử dụng để cập nhật bản thể.

Cập nhật các thuộc tính của bản thể lớp này bằng các thuộc tính từ `kwargs` nếu chúng khớp với các thuộc tính hiện có, và trả về tất cả các kwargs chưa được sử dụng.

#### validate[[transformers.GenerationConfig.validate]]

```python
validate(strict = False, user_set_attributes: set[str] | None = None)
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/configuration_utils.py#L648)

**Tham số:**

strict (bool) : Nếu là True, sẽ ném ngoại lệ cho bất kỳ vấn đề nào được phát hiện. Nếu là False, chỉ ghi log các vấn đề.

user_set_attributes (set[str], *optional*) : Tên của các thuộc tính mà người gọi đã cung cấp rõ ràng. Khi được cung cấp, các cảnh báo "vấn đề nhỏ" về các tổ hợp cờ xung đột (ví dụ: các cờ chỉ dùng cho sampling được đặt trong khi `do_sample=False`) chỉ được kích hoạt nếu cờ xung đột nằm trong tập này -- tránh các cảnh báo gây nhiễu khi giá trị được kế thừa từ `generation_config.json` mặc định của mô hình. Khi `None`, tất cả các thuộc tính đã đặt đều được coi là do người dùng đặt (hành vi tương thích ngược cho các cuộc gọi `validate()` trực tiếp).

Kiểm tra giá trị của các thuộc tính của instance [GenerationConfig](/docs/transformers/main/vi/main_classes/text_generation#transformers.GenerationConfig). Ném ngoại lệ khi có sự tham số hóa có thể phát hiện là không chính xác chỉ từ instance cấu hình.

Lưu ý rằng một số tham số không được xác thực ở đây nên được xác thực vào thời điểm chạy generate, vì chúng có thể phụ thuộc vào các đầu vào khác và/hoặc mô hình, chẳng hạn như các tham số liên quan đến độ dài sinh.

#### get_generation_mode[[transformers.GenerationConfig.get_generation_mode]]

```python
get_generation_mode(assistant_model: typing.Optional[ForwardRef('PreTrainedModel')] = None)
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/configuration_utils.py#L535)

**Tham số:**

assistant_model (`PreTrainedModel`, *tùy chọn*) : Mô hình trợ lý sẽ được sử dụng cho quá trình sinh có hỗ trợ. Nếu được đặt, chế độ sinh sẽ là sinh có hỗ trợ.

**Trả về:** `GenerationMode`

Chế độ sinh được kích hoạt bởi instance.

Trả về chế độ sinh được kích hoạt bởi instance [GenerationConfig](/docs/transformers/main/vi/main_classes/text_generation#transformers.GenerationConfig).

## GenerationMixin[[transformers.GenerationMixin]]

#### transformers.GenerationMixin[[transformers.GenerationMixin]]

```python
transformers.GenerationMixin()
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/utils.py#L494)

Một lớp chứa tất cả các hàm cho việc tạo văn bản tự hồi quy, được sử dụng như một mixin trong các lớp mô hình. Việc kế thừa từ lớp này khiến mô hình có các hành vi đặc biệt liên quan đến việc tạo, chẳng hạn như nạp `GenerationConfig` tại thời điểm khởi tạo hoặc đảm bảo các bài kiểm tra liên quan đến `generate` được chạy trong CI của `transformers`.

Một lớp mô hình nên kế thừa từ `GenerationMixin` để cho phép gọi các phương thức như `generate`, hoặc khi nó đã định nghĩa một phương thức `generate` tùy chỉnh dựa vào `GenerationMixin`, trực tiếp hoặc gián tiếp, vốn chia sẻ gần như cùng một giao diện với các phương thức công khai như `generate`. Ba ví dụ:
- `LlamaForCausalLM` nên kế thừa từ `GenerationMixin` để cho phép gọi `generate` và các phương thức công khai khác trong mixin;
- `BlipForQuestionAnswering` có phương thức `generate` tùy chỉnh, chia sẻ giao diện gần như giống với `GenerationMixin.generate` (nó có một vài đối số bổ sung và cùng một đầu ra). Hàm đó cũng gọi `GenerationMixin.generate` một cách gián tiếp, thông qua một mô hình bên trong. Do đó, `BlipForQuestionAnswering` nên kế thừa từ `GenerationMixin` để hưởng lợi từ tất cả các tự động hóa liên quan đến sinh trong mã nguồn của chúng ta;
- `BarkModel` có phương thức `generate` tùy chỉnh và một trong các mô hình bên trong của nó gọi `GenerationMixin.generate`. Tuy nhiên, `generate` của nó không chia sẻ cùng một giao diện với `GenerationMixin.generate`. Trong trường hợp này, `BarkModel` KHÔNG nên kế thừa từ `GenerationMixin`, vì điều đó sẽ phá vỡ giao diện `generate`.

Lớp này cung cấp [generate()](/docs/transformers/main/vi/main_classes/text_generation#transformers.GenerationMixin.generate), có thể được sử dụng để:
- *giải mã tham lam* nếu `num_beams=1` và `do_sample=False`
- *mẫu đa thức* nếu `num_beams=1` và `do_sample=True`
- *giải mã beam-search* nếu `num_beams>1` và `do_sample=False`
- *mẫu đa thức beam-search* nếu `num_beams>1` và `do_sample=True`
- *giải mã có hỗ trợ* nếu `assistant_model` hoặc `prompt_lookup_num_tokens` được truyền vào `.generate()`

Để tìm hiểu thêm về các chiến lược giải mã, hãy tham khảo [hướng dẫn chiến lược tạo văn bản](../generation_strategies).

#### generate[[transformers.GenerationMixin.generate]]

```python
generate(inputs: typing.Optional[torch.Tensor] = None, generation_config: transformers.generation.configuration_utils.GenerationConfig | None = None, logits_processor: transformers.generation.logits_process.LogitsProcessorList | None = None, stopping_criteria: transformers.generation.stopping_criteria.StoppingCriteriaList | None = None, prefix_allowed_tokens_fn: collections.abc.Callable[[int, torch.Tensor], list[int]] | None = None, synced_gpus: bool | None = None, assistant_model: typing.Optional[ForwardRef('PreTrainedModel')] = None, streamer: typing.Optional[ForwardRef('BaseStreamer')] = None, negative_prompt_ids: typing.Optional[torch.Tensor] = None, negative_prompt_attention_mask: typing.Optional[torch.Tensor] = None, custom_generate: str | collections.abc.Callable | None = None, **kwargs)
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/utils.py#L2581)

**Tham số:**

inputs (`torch.Tensor` có hình dạng thay đổi tùy theo chế độ, *tùy chọn*) : Chuỗi được dùng làm prompt cho quá trình sinh hoặc làm đầu vào mô hình cho bộ mã hóa. Nếu là `None`, phương thức sẽ khởi tạo nó với `bos_token_id` và kích thước lô là 1. Đối với các mô hình chỉ có bộ giải mã, `inputs` phải ở định dạng `input_ids`. Đối với các mô hình mã hóa-giải mã, *inputs* có thể biểu diễn bất kỳ thứ nào trong số `input_ids`, `input_values`, `input_features` hoặc `pixel_values`.

generation_config ([GenerationConfig](/docs/transformers/main/vi/main_classes/text_generation#transformers.GenerationConfig), *optional*) : Cấu hình sinh được sử dụng làm tham số cơ sở cho lệnh gọi sinh. Các `**kwargs` được truyền vào generate khớp với các thuộc tính của `generation_config` sẽ ghi đè lên chúng. Nếu `generation_config` không được cung cấp, giá trị mặc định sẽ được sử dụng, với thứ tự ưu tiên nạp như sau: 1) từ tệp mô hình `generation_config.json`, nếu tệp này tồn tại; 2) từ cấu hình của mô hình. Vui lòng lưu ý rằng các tham số không được chỉ định sẽ kế thừa các giá trị mặc định của [GenerationConfig](/docs/transformers/main/vi/main_classes/text_generation#transformers.GenerationConfig), và tài liệu của chúng nên được kiểm tra để tham số hóa quá trình sinh.

logits_processor (`LogitsProcessorList`, *tùy chọn*) : Các bộ xử lý logits tùy chỉnh bổ sung cho các bộ xử lý logits mặc định được tạo từ các đối số và cấu hình sinh. Nếu một bộ xử lý logits được truyền vào mà đã được tạo bằng các đối số hoặc cấu hình sinh, một lỗi sẽ được ném ra. Tính năng này dành cho người dùng nâng cao.

stopping_criteria (`StoppingCriteriaList`, *tùy chọn*) : Tiêu chí dừng tùy chỉnh bổ sung cho các tiêu chí dừng mặc định được xây dựng từ các đối số và cấu hình sinh. Nếu một tiêu chí dừng được truyền vào mà đã được tạo từ các đối số hoặc cấu hình sinh, một lỗi sẽ được ném ra. Nếu tiêu chí dừng của bạn phụ thuộc vào đầu vào `scores`, hãy đảm bảo bạn truyền `return_dict_in_generate=True, output_scores=True` vào `generate`. Tính năng này dành cho người dùng nâng cao.

prefix_allowed_tokens_fn (`Callable[[int, torch.Tensor], list[int]]`, *tùy chọn*) : Nếu được cung cấp, hàm này ràng buộc beam search chỉ cho phép các token được phép ở mỗi bước. Nếu không được cung cấp, không có ràng buộc nào được áp dụng. Hàm này nhận 2 đối số: ID của batch `batch_id` và `input_ids`. Nó phải trả về một danh sách chứa các token được phép cho bước sinh tiếp theo, có điều kiện dựa trên ID của batch `batch_id` và các token đã được sinh trước đó `inputs_ids`. Đối số này hữu ích cho việc sinh có ràng buộc dựa trên tiền tố, như được mô tả trong [Autoregressive Entity Retrieval](https://huggingface.co/papers/2010.00904).

synced_gpus (`bool`, *optional*) : Có nên tiếp tục chạy vòng lặp while cho đến max_length hay không. Trừ khi được ghi đè, cờ này sẽ được đặt thành `True` nếu sử dụng `FullyShardedDataParallel` hoặc DeepSpeed ZeRO Stage 3 với nhiều GPU để tránh tình trạng deadlock khi một GPU hoàn thành việc tạo ra trước các GPU khác. Ngược lại, mặc định là `False`.

assistant_model (`PreTrainedModel`, *tùy chọn*) : Một mô hình trợ lý có thể được sử dụng để tăng tốc quá trình sinh. Mô hình trợ lý phải có bộ phân từ (tokenizer) hoàn toàn giống nhau. Việc tăng tốc đạt được khi dự đoán các token ứng viên bằng mô hình trợ lý nhanh hơn nhiều so với việc chạy sinh bằng mô hình mà bạn đang gọi generate từ. Do đó, mô hình trợ lý nên nhỏ hơn nhiều.

streamer (`BaseStreamer`, *tùy chọn*) : Đối tượng Streamer sẽ được sử dụng để phát trực tiếp các chuỗi được tạo ra. Các token được tạo sẽ được truyền qua `streamer.put(token_ids)` và streamer chịu trách nhiệm cho bất kỳ xử lý tiếp theo nào.

negative_prompt_ids (`torch.LongTensor` có shape `(batch_size, sequence_length)`, *tuỳ chọn*) : Prompt âm cần thiết cho một số bộ xử lý như CFG. Kích thước batch phải khớp với kích thước batch của đầu vào. Đây là tính năng thử nghiệm, có thể bị thay đổi API gây lỗi trong các phiên bản tương lai.

negative_prompt_attention_mask (`torch.LongTensor` có hình dạng `(batch_size, sequence_length)`, *tùy chọn*) : Attention_mask cho `negative_prompt_ids`.

custom_generate (`str` hoặc `Callable`, *tùy chọn*) : Một trong các lựa chọn sau: - `str` (tên kho trên Hugging Face Hub): chạy hàm `generate` tùy chỉnh được định nghĩa tại `custom_generate/generate.py` trong kho đó thay vì phương thức `generate` tiêu chuẩn. Kho này thay thế hoàn toàn logic tạo ra, và kiểu trả về có thể khác. - `str` (đường dẫn kho cục bộ): giống như trên nhưng từ một đường dẫn cục bộ. Các thư mục cục bộ cũng yêu cầu `trust_remote_code=True` vì `custom_generate/generate.py` cục bộ sẽ được thực thi. - `Callable`: `generate` sẽ thực hiện các bước chuẩn bị đầu vào thông thường, sau đó gọi callable được cung cấp để chạy vòng lặp giải mã. Để biết thêm thông tin, xem [tài liệu](../../generation_strategies#custom-generation-methods).

kwargs (`dict[str, Any]`, *tùy chọn*) : Tham số hóa ad hoc cho `generation_config` và/hoặc các kwargs cụ thể của model bổ sung sẽ được chuyển tiếp đến hàm `forward` của model. Nếu model là model encoder-decoder, các kwargs cụ thể của encoder không nên được thêm tiền tố, còn các kwargs cụ thể của decoder nên được thêm tiền tố *decoder_*.

**Trả về:** [ModelOutput](/docs/transformers/main/vi/main_classes/output#transformers.utils.ModelOutput) hoặc `torch.LongTensor`

Một [ModelOutput](/docs/transformers/main/vi/main_classes/output#transformers.utils.ModelOutput) (nếu `return_dict_in_generate=True` hoặc khi `config.return_dict_in_generate=True`) hoặc một `torch.LongTensor`.

Nếu mô hình *không phải* là mô hình encoder-decoder (`model.config.is_encoder_decoder=False`), các kiểu [ModelOutput](/docs/transformers/main/vi/main_classes/output#transformers.utils.ModelOutput) có thể là:

- [GenerateDecoderOnlyOutput](/docs/transformers/main/vi/internal/generation_utils#transformers.generation.GenerateDecoderOnlyOutput),
- [GenerateBeamDecoderOnlyOutput](/docs/transformers/main/vi/internal/generation_utils#transformers.generation.GenerateBeamDecoderOnlyOutput)

Nếu mô hình là mô hình encoder-decoder (`model.config.is_encoder_decoder=True`), các kiểu [ModelOutput](/docs/transformers/main/vi/main_classes/output#transformers.utils.ModelOutput) có thể là:

- [GenerateEncoderDecoderOutput](/docs/transformers/main/vi/internal/generation_utils#transformers.generation.GenerateEncoderDecoderOutput),
- [GenerateBeamEncoderDecoderOutput](/docs/transformers/main/vi/internal/generation_utils#transformers.generation.GenerateBeamEncoderDecoderOutput)

Tạo ra các chuỗi id token cho các mô hình có đầu mô hình hóa ngôn ngữ.

Hầu hết các tham số kiểm soát quá trình sinh được đặt trong `generation_config`, nếu không được truyền vào, giá trị này sẽ được đặt thành cấu hình sinh mặc định của mô hình. Bạn có thể ghi đè bất kỳ `generation_config` nào bằng cách truyền các tham số tương ứng vào generate(), ví dụ `.generate(inputs, num_beams=4, do_sample=True)`.

Để xem tổng quan về các chiến lược sinh và ví dụ mã, hãy xem [hướng dẫn sau](../generation_strategies).

#### compute_transition_scores[[transformers.GenerationMixin.compute_transition_scores]]

```python
compute_transition_scores(sequences: Tensor, scores: tuple, beam_indices: typing.Optional[torch.Tensor] = None, normalize_logits: bool = False)
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/utils.py#L1734)

**Tham số:**

sequences (`torch.LongTensor`) : Các chuỗi được tạo ra. Chiều thứ hai (sequence_length) bằng `max_length` hoặc ngắn hơn nếu tất cả các batch kết thúc sớm do `eos_token_id`.

scores (`tuple(torch.Tensor)`) : Điểm chuyển tiếp cho từng token từ vựng ở mỗi bước sinh. Điểm chuyển tiếp beam bao gồm log xác suất của các token có điều kiện dựa trên log softmax của các token đã sinh trước đó trong beam này. Tuple của `torch.Tensor` với tối đa `max_new_tokens` phần tử (một phần tử cho mỗi token được sinh), mỗi tensor có hình dạng `(batch_size*num_beams, config.vocab_size)`.

beam_indices (`torch.LongTensor`, *tùy chọn*) : Chỉ số beam của id token được tạo ra ở mỗi bước sinh. `torch.LongTensor` có hình dạng `(batch_size*num_return_sequences, sequence_length)`. Chỉ bắt buộc nếu `num_beams>1` tại thời điểm sinh.

normalize_logits (`bool`, *tùy chọn*, mặc định là `False`) : Có nên chuẩn hóa các logits (vì lý do kế thừa, chúng có thể chưa được chuẩn hóa) hay không.

**Trả về:** `torch.Tensor`

Một `torch.Tensor` có hình dạng `(batch_size*num_return_sequences, sequence_length)` chứa các điểm số chuyển tiếp (logits)

Tính toán điểm chuyển tiếp của các chuỗi dựa trên điểm sinh (và chỉ số beam, nếu đã sử dụng beam search). Đây là một phương pháp tiện lợi để nhanh chóng lấy điểm của các token được chọn tại thời điểm sinh.

Ví dụ:

```python
>>> from transformers import GPT2Tokenizer, AutoModelForCausalLM
>>> import numpy as np

>>> tokenizer = GPT2Tokenizer.from_pretrained("gpt2")
>>> model = AutoModelForCausalLM.from_pretrained("openai-community/gpt2")
>>> tokenizer.pad_token_id = tokenizer.eos_token_id
>>> inputs = tokenizer(["Today is"], return_tensors="pt")

>>> # Example 1: Print the scores for each token generated with Greedy Search
>>> outputs = model.generate(**inputs, max_new_tokens=5, return_dict_in_generate=True, output_scores=True)
>>> transition_scores = model.compute_transition_scores(
...     outputs.sequences, outputs.scores, normalize_logits=True
... )
>>> # input_length is the length of the input prompt for decoder-only models, like the GPT family, and 1 for
>>> # encoder-decoder models, like BART or T5.
>>> input_length = 1 if model.config.is_encoder_decoder else inputs.input_ids.shape[1]
>>> generated_tokens = outputs.sequences[:, input_length:]
>>> for tok, score in zip(generated_tokens[0], transition_scores[0]):
...     # | token | token string | log probability | probability
...     print(f"| {tok:5d} | {tokenizer.decode(tok):8s} | {score.numpy():.3f} | {np.exp(score.numpy()):.2%}")
|   262 |  the     | -1.414 | 24.33%
|  1110 |  day     | -2.609 | 7.36%
|   618 |  when    | -2.010 | 13.40%
|   356 |  we      | -1.859 | 15.58%
|   460 |  can     | -2.508 | 8.14%

>>> # Example 2: Reconstruct the sequence scores from Beam Search
>>> outputs = model.generate(
...     **inputs,
...     max_new_tokens=5,
...     num_beams=4,
...     num_return_sequences=4,
...     return_dict_in_generate=True,
...     output_scores=True,
... )
>>> transition_scores = model.compute_transition_scores(
...     outputs.sequences, outputs.scores, outputs.beam_indices, normalize_logits=False
... )
>>> # If you sum the generated tokens' scores and apply the length penalty, you'll get the sequence scores.
>>> # Tip 1: recomputing the scores is only guaranteed to match with `normalize_logits=False`. Depending on the
>>> # use case, you might want to recompute it with `normalize_logits=True`.
>>> # Tip 2: the output length does NOT include the input length
>>> output_length = np.sum(transition_scores.numpy() < 0, axis=1)
>>> length_penalty = model.generation_config.length_penalty
>>> reconstructed_scores = transition_scores.sum(axis=1) / (output_length**length_penalty)
>>> print(np.allclose(outputs.sequences_scores, reconstructed_scores))
True
```

## ContinuousMixin[[transformers.ContinuousMixin]]

#### transformers.ContinuousMixin[[transformers.ContinuousMixin]]

```python
transformers.ContinuousMixin()
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/continuous_batching/continuous_api.py#L1249)

Lớp Mixin cho các mô hình để thêm khả năng liên tục. Continuous batching có ba điểm vào:
- `init_continuous_batching`, đây là điểm vào thực sự cho continuous batching
- `continuous_batching_context_manager`, bản thân là một lớp bọc quanh `init_continuous_batching`
- `generate_batch`, thực chất là một lớp bọc quanh `continuous_batching_context_manager`

Chúng được định nghĩa theo thứ tự này. Mọi thay đổi được thực hiện trên bất kỳ điểm vào nào trong ba điểm vào đó đều phải được phản ánh ở hai điểm vào còn lại.

#### continuous_batching_context_manager[[transformers.ContinuousMixin.continuous_batching_context_manager]]

```python
continuous_batching_context_manager(generation_config: transformers.generation.configuration_utils.GenerationConfig | None = None, block: bool = True, timeout: float | None = None, continuous_batching_config: transformers.generation.configuration_utils.ContinuousBatchingConfig | None = None, persistent_manager: bool = False, warmup: bool = True, workload_hints: transformers.generation.continuous_batching.utils.WorkloadHints | None = None)
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/continuous_batching/continuous_api.py#L1328)

Một trình quản lý ngữ cảnh để sử dụng an toàn trình quản lý xếp lô liên tục. Các đối số tương tự như của `init_continuous_batching`, ngoại trừ:
- block: có nên chặn luồng khi dừng trình quản lý hay không. Mặc định là True.
- timeout: thời gian tối đa để chờ thread dừng lại. Mặc định là None (không có timeout).
- warmup: có nên bắt trước các đồ thị CUDA ở các kích thước lớn nhất trước khi chạy hay không. Mặc định là True.

#### destroy_cached_continuous_batching_manager[[transformers.ContinuousMixin.destroy_cached_continuous_batching_manager]]

```python
destroy_cached_continuous_batching_manager()
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/continuous_batching/continuous_api.py#L1321)

Phá hủy trình quản lý xếp lô liên tục được lưu trong bộ nhớ đệm và giải phóng tài nguyên GPU.

#### generate_batch[[transformers.ContinuousMixin.generate_batch]]

```python
generate_batch(inputs: list, generation_config: transformers.generation.configuration_utils.GenerationConfig | None = None, continuous_batching_config: transformers.generation.configuration_utils.ContinuousBatchingConfig | None = None, record_timestamps: bool = False, progress_bar: bool = False, persistent_manager: bool = False, warmup: bool = True, **kwargs)
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/continuous_batching/continuous_api.py#L1368)

**Tham số:**

inputs : Danh sách các chuỗi token đầu vào (các prompt)

generation_config : Cấu hình sinh tùy chọn

continuous_batching_config : Cấu hình liên tục tùy chọn

record_timestamps : Nếu được đặt thành true, các yêu cầu sẽ có dấu thời gian cho từng token được tạo ra

progress_bar : Nếu được đặt thành true, một thanh tiến trình sẽ được hiển thị

persistent_manager : có nên lưu trữ trình quản lý sau khi quá trình tạo kết thúc hay không. Mặc định là False.

warmup : có nên bắt trước các đồ thị CUDA trước khi xử lý các yêu cầu hay không. Mặc định là True.

**Trả về:** `dict[str, GenerationOutput]`

một từ điển ánh xạ các id yêu cầu tới các đối tượng GenerationOutput

Tạo các chuỗi cho một lô prompt bằng cách sử dụng continuous batching.

#### init_continuous_batching[[transformers.ContinuousMixin.init_continuous_batching]]

```python
init_continuous_batching(generation_config: transformers.generation.configuration_utils.GenerationConfig | None = None, continuous_batching_config: transformers.generation.configuration_utils.ContinuousBatchingConfig | None = None, workload_hints: transformers.generation.continuous_batching.utils.WorkloadHints | None = None)
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/continuous_batching/continuous_api.py#L1261)

**Tham số:**

generation_config : Cấu hình sinh tùy chọn, có thể chứa một đối tượng CompileConfig

continuous_batching_config : Cấu hình xếp lô liên tục tùy chọn

workload_hints : WorkloadHints tùy chọn để giúp trình quản lý continuous batching đưa ra các quyết định tốt hơn cho các giá trị mặc định

**Trả về:** `ContinuousBatchingManager`

Thư thể quản lý để thêm các yêu cầu và lấy kết quả.

Khởi tạo một trình quản lý cho suy luận xếp lô liên tục.

## ContinuousBatchingManager[[transformers.ContinuousBatchingManager]]

#### transformers.ContinuousBatchingManager[[transformers.ContinuousBatchingManager]]

```python
transformers.ContinuousBatchingManager(model: ProtoPretrainedModel, generation_config: GenerationConfig, continuous_batching_config: ContinuousBatchingConfig, workload_hints: transformers.generation.continuous_batching.utils.WorkloadHints | None = None)
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/continuous_batching/continuous_api.py#L658)

Trình quản lý để xử lý xếp lô liên tục (continuous batching) các yêu cầu sinh. Nó cung cấp giao diện người dùng để gửi yêu cầu sinh, lấy kết quả và quản lý luồng sinh nền. Lớp này không nên được tạo trực tiếp, mà phải thông qua một trong các điểm vào sau (tất cả là các phương thức của mixin `ContinuousMixin`):
- `init_continuous_batching`
- `continuous_batching_context_manager`
- `generate_batch`

#### add_request[[transformers.ContinuousBatchingManager.add_request]]

```python
add_request(input_ids: list, request_id: str | None = None, max_new_tokens: int | None = None, streaming: bool = False, record_timestamps: bool = False, eos_token_id: int | list[int] | None = None, **logit_processor_kwargs: Any)
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/continuous_batching/continuous_api.py#L914)

**Tham số:**

input_ids : ID của token đầu vào để sử dụng làm prompt

request_id : ID yêu cầu tùy chỉnh tùy chọn (tự động tạo nếu là None)

max_new_tokens : Số lượng token mới tối đa cần tạo

streaming : Có nên phát trực tiếp các token khi chúng được tạo ra hay không

record_timestamps : Có ghi lại dấu thời gian cho từng token được tạo hay không

eos_token_id : ID của token kết thúc chuỗi

logit_processor_kwargs : Các đối số từ khóa cho bộ xử lý logits.

**Trả về:** `str | None`

ID của yêu cầu nếu tiến trình là trình điều khiển TP, ngược lại là None.

Thêm một yêu cầu sinh mới vào hàng đợi. Nếu tiến trình không phải là trình điều khiển TP, đây là một thao tác không làm gì.

#### add_requests[[transformers.ContinuousBatchingManager.add_requests]]

```python
add_requests(inputs: list, max_new_tokens: int | None = None, streaming: bool = False, record_timestamps: bool = False, **logit_processor_kwargs: Any)
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/continuous_batching/continuous_api.py#L972)

Hàm tiện ích để xử lý hàng loạt `add_request` và trả về ID của chúng. Xem tài liệu của nó để biết thêm chi tiết.

#### cancel_request[[transformers.ContinuousBatchingManager.cancel_request]]

```python
cancel_request(request_id: str)
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/continuous_batching/continuous_api.py#L1007)

Hủy một yêu cầu theo ID của nó. Nếu hàm này được gọi từ một tiến trình không phải là tiến trình điều khiển TP, nó sẽ không thực hiện gì: chỉ các tiến trình điều khiển TP mới tương tác với trình quản lý.

#### destroy[[transformers.ContinuousBatchingManager.destroy]]

```python
destroy()
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/continuous_batching/continuous_api.py#L887)

Kết thúc trình quản lý và giải phóng các tài nguyên phân tán. An toàn để gọi nhiều lần. Sau khi gọi hàm này, trình quản lý không thể được khởi động lại.

#### get_result[[transformers.ContinuousBatchingManager.get_result]]

```python
get_result(request_id: str | None = None, timeout: float | None = None)
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/continuous_batching/continuous_api.py#L1016)

Lấy một kết quả từ hàng đợi đầu ra. Nếu cung cấp ID, sẽ trả về yêu cầu khớp đầu tiên. Nếu cung cấp timeout, sẽ trả về None sau thời gian timeout (tính bằng giây).

#### is_running[[transformers.ContinuousBatchingManager.is_running]]

```python
is_running()
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/continuous_batching/continuous_api.py#L801)

Trả về True nếu luồng tạo nền đã được khởi động và vẫn đang hoạt động.

#### tham gia[[transformers.ContinuousBatchingManager.join]]

```python
join(stop_trigger_time: float, timeout: float | None = None)
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/continuous_batching/continuous_api.py#L872)

Chờ cho đến khi luồng nền hoàn tất. Việc chờ có thể bị giới hạn bằng đối số timeout (tính bằng giây).

#### tạm dừng[[transformers.ContinuousBatchingManager.pause]]

```python
pause()
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/continuous_batching/continuous_api.py#L894)

Một context manager tạm dừng vòng lặp sinh, cho phép luồng gọi sử dụng mô hình, thường là để cập nhật nó tại chỗ. Luồng chỉ đi vào context này khi vòng lặp đã được tạm dừng, và vòng lặp sẽ tiếp tục khi thoát ra, giữ nguyên bộ nhớ đệm và các yêu cầu đang xử lý: không có gì bị xả và không có yêu cầu nào bị mất. Nhiều luồng có thể giữ trạng thái tạm dừng cùng lúc, và vòng lặp sẽ tiếp tục khi luồng cuối cùng thoát ra. Nếu TP đang bật, tất cả các rank phải đi vào context này, nếu không các rank khác sẽ treo vĩnh viễn.

#### register_result_handler[[transformers.ContinuousBatchingManager.register_result_handler]]

```python
register_result_handler(request_id: str, callback: Callable)
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/continuous_batching/continuous_api.py#L1053)

**Tham số:**

request_id (*str*) : ID yêu cầu để nhận kết quả đầu ra.

callback (*callable*) : Được gọi với một `GenerationOutput` cho mỗi kết quả.

Đăng ký một callback để giao kết quả (dòng chảy hoặc không dòng chảy).

Callback được gọi trên vòng lặp sự kiện thông qua `call_soon_threadsafe` mỗi khi một kết quả được tạo ra cho yêu cầu này. Đối với các yêu cầu streaming, điều này xảy ra ở mỗi token; đối với các yêu cầu không streaming, chỉ xảy ra khi hoàn tất. Handler được dọn dẹp tự động khi yêu cầu kết thúc.

#### request_id_iter[[transformers.ContinuousBatchingManager.request_id_iter]]

```python
request_id_iter(request_id: str)
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/continuous_batching/continuous_api.py#L1040)

Lặp qua các kết quả khớp với một id yêu cầu cụ thể (chặn).

Sử dụng hàng đợi đầu ra chung với tính năng xếp hàng lại. Để phục vụ với mức độ đồng thời cao, hãy sử dụng `register_result_handler` thay thế.

#### bắt đầu[[transformers.ContinuousBatchingManager.start]]

```python
start()
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/continuous_batching/continuous_api.py#L805)

Bắt đầu luồng tạo nền.

#### stop[[transformers.ContinuousBatchingManager.stop]]

```python
stop(block: bool = True, timeout: float | None = None, keep_for_next_session: bool = False, hard_stop: bool = False)
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/continuous_batching/continuous_api.py#L814)

Dừng luồng tạo nền. Nếu cờ `block` được đặt thành True, phương thức này sẽ chờ cho đến khi luồng dừng lại trong tối đa `timeout` giây (None nghĩa là không có thời gian chờ). Nếu cờ `keep_for_next_session` được đặt thành True, trình quản lý sẽ được lưu đệm trên mô hình để sử dụng sau này. Nếu cờ `hard_stop` được đặt, luồng tạo nền sẽ bị dừng ngay lập tức và các yêu cầu đang chờ sẽ bị thất bại.

#### switch_to_cb_friendly_attn[[transformers.ContinuousBatchingManager.switch_to_cb_friendly_attn]]

```python
switch_to_cb_friendly_attn(model: ProtoPretrainedModel, auto_switch_to_flash: bool = True)
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/continuous_batching/continuous_api.py#L745)

Chuyển đổi implementation của attn sang một phiên bản tương thích với CB. Nếu auto_switch_to_flash là True, và implementation của attn là SDPA hoặc eager, thì cũng chuyển sang flash nếu được hỗ trợ và khả dụng.

#### warmup[[transformers.ContinuousBatchingManager.warmup]]

```python
warmup()
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/continuous_batching/continuous_api.py#L791)

Chạy các lô dữ liệu giả lập để tạo trước các đồ thị CUDA cho các đường dẫn varlen và decode. Khởi tạo bộ xử lý lô dữ liệu nếu chưa được thực hiện.

## Trình lập lịch[[transformers.generation.Scheduler]]

#### transformers.generation.Scheduler[[transformers.generation.Scheduler]]

```python
transformers.generation.Scheduler(cache: PagedAttentionCache, safety_margin: float, max_requests_per_batch: int)
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/continuous_batching/scheduler.py#L23)

Lớp trừu tượng dùng để lập lịch các yêu cầu trong bộ xử lý lô liên tục. Các trình lập lịch quản lý vòng đời của yêu cầu từ khi chúng được thêm vào hàng đợi chờ cho đến khi được lập lịch để xử lý. Các trình lập lịch khác nhau triển khai các chiến lược khác nhau để ưu tiên và nhóm các yêu cầu thành lô.

#### add_waiting_request[[transformers.generation.Scheduler.add_waiting_request]]

```python
add_waiting_request(state: RequestState)
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/continuous_batching/scheduler.py#L58)

Thêm một yêu cầu vào danh sách chờ.

#### clear_cancelled_requests[[transformers.generation.Scheduler.clear_cancelled_requests]]

```python
clear_cancelled_requests()
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/continuous_batching/scheduler.py#L96)

Xóa tất cả các yêu cầu đã bị hủy khỏi hàng đợi hoạt động và hàng đợi chờ.

#### finish_request[[transformers.generation.Scheduler.finish_request]]

```python
finish_request(request_id: str)
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/continuous_batching/scheduler.py#L78)

Hoàn tất xử lý một yêu cầu và giải phóng các khối cache đã cấp phát cho nó. Phương thức này được gọi khi một yêu cầu đã hoàn tất quá trình sinh hoặc gặp lỗi.

#### get_active_request_static_outputs[[transformers.generation.Scheduler.get_active_request_static_outputs]]

```python
get_active_request_static_outputs(request_id: str)
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/continuous_batching/scheduler.py#L85)

Lấy các token đã được tạo cho một yêu cầu đang hoạt động.

#### has_pending_requests[[transformers.generation.Scheduler.has_pending_requests]]

```python
has_pending_requests()
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/continuous_batching/scheduler.py#L74)

Kiểm tra xem có yêu cầu nào sẵn sàng để xử lý hay không.

#### request_is_cancelled[[transformers.generation.Scheduler.request_is_cancelled]]

```python
request_is_cancelled(request_id: str)
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/continuous_batching/scheduler.py#L113)

Kiểm tra xem một yêu cầu đã bị hủy bỏ hay xóa bỏ chưa.

#### reset[[transformers.generation.Scheduler.reset]]

```python
reset()
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/continuous_batching/scheduler.py#L47)

Đặt lại trạng thái của trình lập lịch cho một vòng lặp sinh mới.

#### schedule_batch[[transformers.generation.Scheduler.schedule_batch]]

```python
schedule_batch(token_budget: int, cache_budget: int)
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/continuous_batching/scheduler.py#L63)

Lập lịch các yêu cầu cho lô tiếp theo dựa trên ngân sách token và bộ nhớ đệm khả dụng. Phương thức này chọn các yêu cầu cần được xử lý trong lô hiện tại, có xét đến các ngân sách và các quy tắc ưu tiên của bộ lập lịch. token_budget là số lượng token tối đa có thể được xử lý trong một lô, và cache_budget là số lượng mục bộ nhớ đệm KV tối đa có thể được đọc trong một lô. Trả về danh sách các yêu cầu đã được lập lịch ở dạng "FutureRequestState", một giá trị boolean chỉ ra liệu có thể sử dụng đường dẫn nhanh cho giải mã hay không, tổng số token truy vấn và số lượng token kv tối đa được đọc.

#### set_request_cancellation[[transformers.generation.Scheduler.set_request_cancellation]]

```python
set_request_cancellation(request_id: str)
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/continuous_batching/scheduler.py#L91)

Đánh dấu một yêu cầu hủy bỏ.

## FIFOScheduler[[transformers.generation.FIFOScheduler]]

#### transformers.generation.FIFOScheduler[[transformers.generation.FIFOScheduler]]

```python
transformers.generation.FIFOScheduler(cache: PagedAttentionCache, safety_margin: float | None, max_requests_per_batch: int)
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/continuous_batching/scheduler.py#L308)

Trình lập lịch này xử lý các yêu cầu theo thứ tự chúng đến, có nghĩa là các yêu cầu giải mã có quyền ưu tiên cao hơn các yêu cầu tiền xử lý.

## PrefillFirstScheduler[[transformers.generation.PrefillFirstScheduler]]

#### transformers.generation.PrefillFirstScheduler[[transformers.generation.PrefillFirstScheduler]]

```python
transformers.generation.PrefillFirstScheduler(cache: PagedAttentionCache, safety_margin: float | None, max_requests_per_batch: int)
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/generation/continuous_batching/scheduler.py#L357)

Trình lập lịch ưu tiên các yêu cầu prefill tách rời so với các yêu cầu giải mã. Trình lập lịch này đảm bảo rằng các yêu cầu prefill tách rời (là phần tiếp nối của các prompt đã được xử lý một phần) được hoàn thành trước khi xử lý các yêu cầu giải mã mới.

