Transformers documentation
Sinh
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() được triển khai trong GenerationMixin.
Bạn có thể tham số hóa phương thức generate bằng một instance của class 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. 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
lớp transformers.GenerationConfig
< source >( **kwargs )
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, tùy chọn) — Số lượng token tối đa cần tạo, bỏ qua số lượng token trong prompt. - min_length (
int, tùy chọn) — Độ dài tối thiểu của chuỗi đượ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ó bị ghi đè bởimin_new_tokens, nếu tham số đó cũng được đặt. - min_new_tokens (
int, tùy chọn) — Số lượng token tối thiểu cần tạo, không tính số token trong prompt. - early_stopping (
boolhoặcstr, tùy chọn) — 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 hơn (thuật toán beam search chính tắc). - max_time (
float, tùy chọn) — Thời gian tối đa (tính bằng giây) mà bạn cho phép quá trình tính toán chạy. Việc 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 (
strhoặclist[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 tạo 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, tùy chọn) — Số lượng beam cho beam search. 1 có nghĩa là không 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 quá trình 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 tronggenerate, để giải mã nhanh hơn. Các giá trị có thể là:"dynamic": DynamicCache"static": StaticCache"offloaded":DynamicCache(offloaded=True)"offloaded_static":StaticCache(offloaded=True)"quantized": QuantizedCache
Nếu không có giá trị nào được chỉ định, chúng tôi sẽ sử dụng bộ nhớ đệm mặc định cho mô hình (thường là DynamicCache). Xem tài liệu về bộ nhớ đệm 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 cache key-value có thể được truyền vàocache_config. - max_cache_len (
int, tùy chọn) — 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_lengthcủa lần gọi hiện tại. Hãy đặ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ọigenerate()lặp lại với prompt dài hơn hoặcmax_new_tokenslớn hơn (tới ngưỡng 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ạitorch.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ệpgeneration_config.jsoncủa mô hình. Nếu không được đặt, giá trị mặc định là 1.0 - top_k (
int, tùy chọn) — Số lượng token từ vựng có xác suất cao nhất được giữ lại cho lọc top-k. Giá trị này được đặt trong tệpgeneration_config.jsoncủa mô hình. Nếu không được đặt, giá trị mặc định là 50. - top_p (
float, tùy chọn) — Nếu được đặt thành float < 1, chỉ tập hợp nhỏ nhất 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ơntop_psẽ được giữ lại cho quá trình sinh. Giá trị này được đặt trong tệpgeneration_config.jsoncủa mô hình. Nếu không được đặt, giá trị mặc định là 1.0 - min_p (
float, tùy chọn) — 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ó tính chọn lọc tương đương với việc đặttop_ptrong khoảng 0.99-0.8 (sử dụng giá trịtop_pngược lại so với thông thường). - top_h (
float, tùy chọn) — 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. Ở 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ằngtop_hnhân với 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 tính 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, tùy chọn) — Độ điển hình cục bộ đo mức độ tương đồng giữa xác suất có điều kiện để dự đoán token 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 bằng float < 1, tập hợp nhỏ nhất gồm các token điển hình cục bộ nhất với tổng xác suất bằng hoặc lớn hơntypical_psẽ được giữ lại cho quá trình tạo. Xem bài báo này để biết thêm chi tiết. - epsilon_cutoff (
float, tùy chọn) — Nếu được đặt thành một số 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ơnepsilon_cutoffmới đượ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 để 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 một số 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ơneta_cutoffhoặcsqrt(eta_cutoff) * exp(-entropy(softmax(next_token_logits))). Số hạng sau, 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ớisqrt(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 để 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 để biết thêm chi tiết. - encoder_repetition_penalty (
float, tùy chọn) — 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, tùy chọn) — 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 khilength_penalty< 0.0 khuyến khích các chuỗi ngắn hơn. - no_repeat_ngram_size (
int, tùy chọn) — 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 để 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ànhTruevì 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ể phá vỡ sự chuẩn hóa đó. - forced_bos_token_id (
int, tùy 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 sinh ra saudecoder_start_token_id. Hữu ích cho các mô hình đa ngôn ngữ như mBART, nơi token đầu tiên được sinh ra cần phải là token của ngôn ngữ đích. - forced_eos_token_id (
intor list[int], *optional*, defaults tomodel.config.forced_eos_token_id) -- The id of the token to force as the last generated token whenmax_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ụngremove_invalid_valuescó thể làm chậm quá trình sinh. - exponential_decay_length_penalty (
tuple(int, float), tùy chọn) — 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 sinh ra. Tuple phải bao gồm:(start_index, decay_factor)trong đóstart_indexchỉ đị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], tùy chọn) — Một danh sách các token sẽ bị loại bỏ trong quá trình sinh. Bộ xử lý logitSuppressTokenssẽ đặt log probs của chúng thành-infđể chúng không được lấy mẫu. - begin_suppress_tokens (
list[int], tuỳ chọn) — Một danh sách các token sẽ bị chặn ở đầu quá trình sinh. Bộ xử lý logitSuppressBeginTokenssẽ đặt xác suất log của chúng thành-infđể chúng không được lấy mẫu. - sequence_bias (
dict[tuple[int], float], tuỳ chọn) — Từ điển ánh xạ một chuỗi token đến số hạng bias của nó. Bias dương làm tăng xác suất chuỗi được chọn, trong khi bias âm thì ngược lại. Xem SequenceBiasLogitsProcessor để biết thêm tài liệu và ví dụ. - token_healing (
bool) — Khôi phục 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 kết quả hoàn thành cho những prompt bị ảnh hưởng bởi thiên kiến token hóa tham lam. - guidance_scale (
float, tùy chọn) — Thang độ dẫn hướng cho classifier free guidance (CFG). CFG được kích hoạt bằng cách đặtguidance_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 (
BaseWatermarkingConfighoặcdict, 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 và WatermarkingConfig để biết thêm chi tiết. Nếu được truyền dưới dạngDict, nó sẽ được chuyển đổi thànhWatermarkingConfigbên trong.
Các tham số xác định các biến đầu ra của generate
- num_return_sequences (
int, tùy 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 batch. - output_attentions (
bool) — Có nên trả về các tensor attentions của tất cả các lớp attention hay không. Xemattentionstrong phần tensor được trả về để biết thêm chi tiết. - output_hidden_states (
bool) — Có trả về trạng thái ẩn (hidden states) của tất cả các lớp hay không. Xemhidden_statestrong phần tensor trả về để biết thêm chi tiết. - output_scores (
bool) — Có trả về điểm dự đoán hay không. Xemscorestrong các tensor được trả về để biết thêm chi tiết. - output_logits (
bool) — Có trả về các điểm logit dự đoán chưa được xử lý hay không. Xemlogitstrong các tensor được trả về để biết thêm chi tiết. - return_dict_in_generate (
bool) — Có nên trả về một ModelOutput hay không, thay vì chỉ trả về chuỗi được tạo ra. Cờ này phải được đặt thànhTrueđể trả về bộ nhớ đệm sinh (khiuse_cachelàTrue) hoặc các đầu ra tùy chọn (xem các cờ bắt đầu bằngoutput_)
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, tùy chọn) — Id của token beginning-of-sequence. - eos_token_id (
Union[int, list[int]], tuỳ chọn) — Id của token kết thúc chuỗi. Tuỳ chọn, dùng một danh sách để đặt nhiều token kết thúc chuỗi.
Các tham số sinh chỉ dành cho mô hình encoder-decoder
- encoder_no_repeat_ngram_size (
int, tùy chọn) — Nếu được đặt thành int > 0, tất cả các ngram có kích thước đó xuất hiện trongencoder_input_idssẽ không thể xuất hiện trongdecoder_input_ids. - decoder_start_token_id (
inthoặclist[int], tùy 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àibatch_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)
Các 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, tuỳ chọn) — Xác định số lượng token suy đoán 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 củanum_assistant_tokenskhiến quá trình tạo ra mang tính suy đoán hơn: nếu mô hình trợ lý hoạt động hiệu quả, mức tăng tốc lớn hơn có thể đạt được; nếu mô hình trợ lý cần nhiều lần hiệu chỉnh, mức tăng tốc sẽ thấp hơn. - num_assistant_tokens_schedule (
str, tuỳ chọn) — Định nghĩa lịch trình để thay đổi số lượng token trợ lý tối đa trong quá trình suy luận."heuristic": Khi tất cả các token suy đoán đều chính xác, tăngnum_assistant_tokenslên 2, ngược lại giảm đi 1. Giá trị củanum_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ưngnum_assistant_tokenssẽ được đặt lại về giá trị ban đầu sau mỗi lần gọi generation."constant":num_assistant_tokenskhông thay đổi trong quá trình sinh
- assistant_confidence_threshold (
float, tùy chọn) — 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ởinum_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 https://huggingface.co/papers/2405.04304. - prompt_lookup_num_tokens (
int, tùy chọn) — Số lượng token được xuất ra dưới dạng các token ứng viên. - max_matching_ngram_size (
int, tùy chọn) — 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 model sẽ được sử dụng như một assistant. Chỉ có thể được sử dụng với các model hỗ trợ early exit (tức là các model 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êmassistant_lookbehindtoken trợ lý 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 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êmtarget_lookbehindtoken đích 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 này để biết thêm chi tiết. - assistant_ensemble_weight (
float, tùy chọn) — Bật xác minh ensemble tĩnh trong speculative decoding. Nếu được đặt thành một giá trị trong(0.0, 1.0), verifier sẽ chấp nhận các token dựa trên hỗn hợpw * p_target + (1 - w) * q_draftthay vìp_target, đánh đổi một độ lệ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 assistant phải trả về logits, do đó không tương thích với prompt lookup decoding. - speculation_type (
str, tùy chọn) — Loại 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 đang sử dụng cache có thể biên dịch, tham số này kiểm soát cách
generatesẽcompilebước truyền thẳng (forward pass) để suy luận nhanh hơn. - disable_compile (
bool) — Có nên vô hiệu hóa việc biên dịch tự động của bước forward hay không. Việc biên dịch tự động diễn ra khi các tiêu chí cụ thể được đáp ứng, bao gồm việc sử dụng cache có thể biên dịch. Vui lòng mở một issue nếu bạn phát hiện nhu cầu 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=1vàdo_sample=False - mẫu đa thức nếu
num_beams=1vàdo_sample=True - giải mã beam-search nếu
num_beams>1vàdo_sample=False - mẫu đa thức beam-search nếu
num_beams>1vàdo_sample=True - giải mã có hỗ trợ nếu
assistant_modelhoặcprompt_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.
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 để 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
< source >( pretrained_model_name: str | os.PathLikeconfig_file_name: str | os.PathLike | None = Nonecache_dir: str | os.PathLike | None = Noneforce_download: bool = Falselocal_files_only: bool = Falsetoken: str | bool | None = Nonerevision: str = 'main'**kwargs ) → GenerationConfig
Tham số
- pretrained_model_name (
strhoặcos.PathLike) — Đây có thể là:- một chuỗi, model id của một cấu hình model được huấn luyện trước được lưu trữ trong một kho model 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(), ví dụ:
./my_model_directory/.
- config_file_name (
strhoặcos.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 (
strhoặcos.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 đệm nếu không sử dụng bộ lưu đệm tiêu chuẩn. - force_download (
bool, tùy chọn, mặc định làFalse) — Có nên buộc (tải 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], tuỳ 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 này được sử dụng cho mỗi yêu cầu. - token (
strhoặcbool, tùy chọn) — Token được sử dụng làm HTTP bearer authorization cho các tệp từ xa. NếuTrue, hoặc không được chỉ định, sẽ sử dụng token được tạo khi chạyhf auth login(được lưu trong~/.huggingface). - revision (
str, tuỳ 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 tag hoặc id commit, vì chúng tôi sử dụng hệ thống dựa trên git để lưu trữ mô hình và các artifact khác trên huggingface.co, do đórevisioncó 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, tùy chọn, mặc định làFalse) — NếuFalse, 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ộtTuple(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ủakwargschưa được sử dụng để cập nhậtconfigvà bị bỏ qua trong mọi trường hợp khác. - 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óareturn_unused_kwargs.
Trả về
Đố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 từ tệp cấu hình sinh.
Ví dụ:
>>> 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
< source >( model_config: typing.Union[ForwardRef('PreTrainedConfig'), dict] ) → GenerationConfig
Tạo một GenerationConfig từ một PreTrainedConfig. Hàm này hữu ích để chuyển đổi các đối tượng PreTrainedConfig cũ, có thể chứa các tham số sinh, thành một GenerationConfig độc lập.
save_pretrained
< source >( save_directory: str | os.PathLikeconfig_file_name: str | os.PathLike | None = Nonepush_to_hub: bool = False**kwargs )
Tham số
- save_directory (
strhoặcos.PathLike) — Thư mục nơi tệp JSON cấu hình sẽ được lưu (sẽ được tạo nếu chưa tồn tại). - config_file_name (
strhoặcos.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 trongsave_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ằngrepo_id(mặc định sẽ là tên củasave_directorytrong 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().
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().
cập nhật
< source >( defaults_only = Falseallow_custom_entries = False**kwargs ) → dict[str, Any]
Tham số
- defaults_only (
bool, tùy chọn, mặc định làFalse) — Liệu có cập nhật tất cả các khóa trong config bằngkwargshay 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) — Có cho phép cập nhật các mục tùy chỉnh vào cấu hình bằngkwargshay không nếu chúng không có trong cấu hình hiện tại. - 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
< source >( strict = Falseuser_set_attributes: set[str] | None = None )
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], tuỳ chọn) — Tên của các thuộc tính do người gọi cung cấp một cách tường minh. 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.jsonmặc định của mô hình. KhiNone, 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 lời gọivalidate()trực tiếp).
Kiểm tra giá trị của các thuộc tính của instance 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
< source >( assistant_model: typing.Optional[ForwardRef('PreTrainedModel')] = None ) → GenerationMode
Trả về chế độ sinh được kích hoạt bởi instance GenerationConfig.
GenerationMixin
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.
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ụ:
LlamaForCausalLMnên kế thừa từGenerationMixinđể cho phép gọigeneratevà các phương thức công khai khác trong mixin;BlipForQuestionAnsweringcó phương thứcgeneratetùy chỉnh, chia sẻ giao diện gần như giống vớiGenerationMixin.generate(nó có một vài đối số bổ sung và cùng một đầu ra). Hàm đó cũng gọiGenerationMixin.generatemột cách gián tiếp, thông qua một mô hình bên trong. Do đó,BlipForQuestionAnsweringnê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;BarkModelcó phương thứcgeneratetùy chỉnh và một trong các mô hình bên trong của nó gọiGenerationMixin.generate. Tuy nhiên,generatecủa nó không chia sẻ cùng một giao diện vớiGenerationMixin.generate. Trong trường hợp này,BarkModelKHÔNG nên kế thừa từGenerationMixin, vì điều đó sẽ phá vỡ giao diệngenerate.
Lớp này cung cấp generate(), có thể được sử dụng để:
- giải mã tham lam nếu
num_beams=1vàdo_sample=False - mẫu đa thức nếu
num_beams=1vàdo_sample=True - giải mã beam-search nếu
num_beams>1vàdo_sample=False - mẫu đa thức beam-search nếu
num_beams>1vàdo_sample=True - giải mã có hỗ trợ nếu
assistant_modelhoặcprompt_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.
generate
< source >( inputs: typing.Optional[torch.Tensor] = Nonegeneration_config: transformers.generation.configuration_utils.GenerationConfig | None = Nonelogits_processor: transformers.generation.logits_process.LogitsProcessorList | None = Nonestopping_criteria: transformers.generation.stopping_criteria.StoppingCriteriaList | None = Noneprefix_allowed_tokens_fn: collections.abc.Callable[[int, torch.Tensor], list[int]] | None = Nonesynced_gpus: bool | None = Noneassistant_model: typing.Optional[ForwardRef('PreTrainedModel')] = Nonestreamer: typing.Optional[ForwardRef('BaseStreamer')] = Nonenegative_prompt_ids: typing.Optional[torch.Tensor] = Nonenegative_prompt_attention_mask: typing.Optional[torch.Tensor] = Nonecustom_generate: str | collections.abc.Callable | None = None**kwargs ) → ModelOutput or torch.LongTensor
Tham số
- inputs (
torch.Tensorcó hình dạng thay đổi tùy theo chế độ, không bắt buộc) — 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ếuNone, phương thức sẽ khởi tạo nó vớibos_token_idvà kích thước batch là 1. Đối với các mô hình chỉ có bộ giải mã,inputsphải ở định dạnginput_ids. Đối với các mô hình mã hóa-giải mã, inputs có thể đại diện cho bất kỳinput_ids,input_values,input_features, hoặcpixel_values. - generation_config (GenerationConfig, optional) —
Cấu hình sinh được sử dụng làm tham số cơ sở cho lệnh gọi sinh.
**kwargsđược truyền vào generate và khớp với các thuộc tính củageneration_configsẽ ghi đè lên chúng. Nếugeneration_configkhô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ìnhgeneration_config.json, nếu tệp này tồn tại; 2) từ cấu hình 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, 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 logits processor tùy chỉnh bổ sung cho các logits processor mặc định được tạo từ các đối số và cấu hình sinh. Nếu một logit processor được truyền vào mà đã được tạo từ các đối số hoặc một 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 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àoscores, hãy đảm bảo bạn truyềnreturn_dict_in_generate=True, output_scores=Truevàogenerate. 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 sẽ ràng buộc beam search chỉ sử dụng các token được phép ở mỗi bước. Nếu không được cung cấp, sẽ không áp dụng ràng buộc nào. Hàm này nhận 2 đối số: ID của batchbatch_idvà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, dựa trên ID của batchbatch_idvà 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. - synced_gpus (
bool, tùy chọn) — Có 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ànhTruenếu sử dụngFullyShardedDataParallelhoặc DeepSpeed ZeRO Stage 3 với nhiều GPU để tránh tình trạng deadlock nếu 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ó cùng bộ phân từ (tokenizer) chính xác. 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, tuỳ chọn) — Đối tượng Streamer sẽ được dùng để stream các chuỗi được tạo ra. Các token được tạo sẽ được truyền quastreamer.put(token_ids)và streamer chịu trách nhiệm cho mọi xử lý tiếp theo. - negative_prompt_ids (
torch.LongTensorcó shape(batch_size, sequence_length), tùy 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 đầ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.LongTensorcó hình dạng(batch_size, sequence_length), tùy chọn) — Attention_mask chonegative_prompt_ids. - custom_generate (
strhoặcCallable, tùy chọn) — Một trong các lựa chọn sau:str(tên kho Hugging Face Hub): chạy hàmgeneratetùy chỉnh được định nghĩa tạicustom_generate/generate.pytrong kho đó thay vì phương thứcgeneratetiê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ầutrust_remote_code=Truevìcustom_generate/generate.pycục bộ sẽ được thực thi.Callable:generatesẽ 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.
- kwargs (
dict[str, Any], tùy chọn) — Tham số hóa ad hoc chogeneration_configvà/hoặc các kwargs cụ thể của model bổ sung sẽ được chuyển tiếp đến hàmforwardcủa model. Nếu model là model encoder-decoder, các kwargs cụ thể của encoder không nên có tiền tố và các kwargs cụ thể của decoder nên có tiền tố decoder_.
Trả về
ModelOutput hoặc torch.LongTensor
Một 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 có thể là:
Nếu mô hình là mô hình encoder-decoder (model.config.is_encoder_decoder=True), các kiểu
ModelOutput có thể là:
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, 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_confignà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.
compute_transition_scores
< source >( sequences: Tensorscores: tuplebeam_indices: typing.Optional[torch.Tensor] = Nonenormalize_logits: bool = False ) → torch.Tensor
Tham số
- sequences (
torch.LongTensor) — Các chuỗi được tạo ra. Chiều thứ hai (sequence_length) bằngmax_lengthhoặc ngắn hơn nếu tất cả các batch kết thúc sớm doeos_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 các 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ủatorch.Tensorvới tối đamax_new_tokensphần tử (một phần tử cho mỗi token đã 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.LongTensorcó hình dạng(batch_size*num_return_sequences, sequence_length). Chỉ bắt buộc nếunum_beams>1tạ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ụ:
>>> 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))
TrueContinuousMixin
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 batchingcontinuous_batching_context_manager, bản thân là một lớp bọc quanhinit_continuous_batchinggenerate_batch, thực chất là một lớp bọc quanhcontinuous_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
< source >( generation_config: transformers.generation.configuration_utils.GenerationConfig | None = Noneblock: bool = Truetimeout: float | None = Nonecontinuous_batching_config: transformers.generation.configuration_utils.ContinuousBatchingConfig | None = Nonepersistent_manager: bool = Falsewarmup: bool = Trueworkload_hints: transformers.generation.continuous_batching.utils.WorkloadHints | None = None )
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.
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
< source >( inputs: listgeneration_config: transformers.generation.configuration_utils.GenerationConfig | None = Nonecontinuous_batching_config: transformers.generation.configuration_utils.ContinuousBatchingConfig | None = Nonerecord_timestamps: bool = Falseprogress_bar: bool = Falsepersistent_manager: bool = Falsewarmup: bool = True**kwargs ) → dict[str, GenerationOutput]
Tham số
- inputs — Danh sách các chuỗi token đầu vào (prompt)
- generation_config — Cấu hình sinh tùy chọn
- continuous_batching_config — Cấu hình continuous batching 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 giữ lại manager sau khi quá trình sinh 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
< source >( generation_config: transformers.generation.configuration_utils.GenerationConfig | None = Nonecontinuous_batching_config: transformers.generation.configuration_utils.ContinuousBatchingConfig | None = Noneworkload_hints: transformers.generation.continuous_batching.utils.WorkloadHints | None = None ) → ContinuousBatchingManager
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 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
lớp transformers.ContinuousBatchingManager
< source >( model: ProtoPretrainedModelgeneration_config: GenerationConfigcontinuous_batching_config: ContinuousBatchingConfigworkload_hints: transformers.generation.continuous_batching.utils.WorkloadHints | None = None )
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 đây (tất cả là các phương thức của mixin ContinuousMixin):
init_continuous_batchingcontinuous_batching_context_managergenerate_batch
add_request
< source >( input_ids: listrequest_id: str | None = Nonemax_new_tokens: int | None = Nonestreaming: bool = Falserecord_timestamps: bool = Falseeos_token_id: int | list[int] | None = None**logit_processor_kwargs: Any ) → str | None
Tham số
- input_ids — Các ID token đầu vào được 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ố dạng 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
< source >( inputs: listmax_new_tokens: int | None = Nonestreaming: bool = Falserecord_timestamps: bool = False**logit_processor_kwargs: Any )
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.
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ý.
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.
Lấy một kết quả từ hàng đợi đầu ra. Nếu một ID được cung cấp, trả về yêu cầu khớp đầu tiên. Nếu một timeout được cung cấp, trả về None sau khi hết timeout (tính bằng giây).
Trả về True nếu luồng tạo nền đã được khởi động và vẫn đang hoạt động.
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).
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 ngữ cảnh 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 ngữ cảnh này, nếu không các rank khác sẽ treo vĩnh viễn.
register_result_handler
< source >( request_id: strcallback: Callable )
Đă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.
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 luồng tạo nền.
stop
< source >( block: bool = Truetimeout: float | None = Nonekeep_for_next_session: bool = Falsehard_stop: bool = False )
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
< source >( model: ProtoPretrainedModelauto_switch_to_flash: bool = True )
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.
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ô nếu chưa được thực hiện.
Trình lập lịch
lớp transformers.generation.Scheduler
< source >( cache: PagedAttentionCachesafety_margin: floatmax_requests_per_batch: int )
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. Bộ lập lịch quản lý vòng đời của các 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 bộ 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ô.
Thêm một yêu cầu vào danh sách chờ.
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ờ.
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.
Lấy các token đã được tạo cho một yêu cầu đang hoạt động.
Kiểm tra xem có yêu cầu nào sẵn sàng để xử lý hay không.
Kiểm tra xem một yêu cầu đã bị hủy bỏ hay xóa bỏ chưa.
Đặ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.
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 trình 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.
Đánh dấu một yêu cầu hủy bỏ.
FIFOScheduler
lớp transformers.generation.FIFOScheduler
< source >( cache: PagedAttentionCachesafety_margin: float | Nonemax_requests_per_batch: int )
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
lớp transformers.generation.PrefillFirstScheduler
< source >( cache: PagedAttentionCachesafety_margin: float | Nonemax_requests_per_batch: int )
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.