Transformers documentation
Mô hình
Mô hình
Lớp cơ sở PreTrainedModel triển khai các phương thức chung để tải/lưu một mô hình từ một tệp hoặc thư mục cục bộ, hoặc từ cấu hình mô hình được huấn luyện trước do thư viện cung cấp (được tải xuống từ HuggingFace’s Hub).
PreTrainedModel cũng triển khai một số phương thức phổ biến giữa tất cả các mô hình để:
- thay đổi kích thước các embedding token đầu vào khi có token mới được thêm vào từ vựng
Các phương thức khác phổ biến ở mỗi model được định nghĩa trong ModuleUtilsMixin và GenerationMixin.
PreTrainedModel
Lớp cơ sở cho tất cả các mô hình.
PreTrainedModel chịu trách nhiệm lưu trữ cấu hình của các mô hình và xử lý các phương thức để tải, tải xuống và lưu trữ mô hình, cũng như một số phương thức chung cho tất cả các mô hình:
- thay đổi kích thước các embedding đầu vào
Thuộc tính lớp (được ghi đè bởi các lớp kế thừa):
- config_class (PreTrainedConfig) — Một lớp con của PreTrainedConfig để sử dụng làm lớp cấu hình cho kiến trúc mô hình này.
- base_model_prefix (
str) — Chuỗi chỉ định thuộc tính liên quan đến mô hình cơ bản trong các lớp dẫn xuất cùng kiến trúc, thêm các module lên trên mô hình cơ bản. - main_input_name (
str) — Tên của đầu vào chính của mô hình (thường làinput_idscho các mô hình NLP,pixel_valuescho các mô hình thị giác vàinput_valuescho các mô hình giọng nói). - can_record_outputs (dict):
push_to_hub
< source >( repo_id: strcommit_message: str | None = Nonecommit_description: str | None = Noneprivate: bool | None = Nonetoken: bool | str | None = Nonerevision: str | None = Nonecreate_pr: bool = Falsemax_shard_size: int | str | None = '50GB'tags: list[str] | None = None )
Tham số
- repo_id (
str) — Tên của kho mà bạn muốn đẩy mô hình của mình lên. Nó nên chứa tên tổ chức của bạn khi đẩy lên một tổ chức cụ thể. - commit_message (
str, tùy chọn) — Thông điệp để commit khi đẩy. Mặc định là"Upload model". - commit_description (
str, tùy chọn) — Mô tả của commit sẽ được tạo - private (
bool, optional) — Xác định có làm cho kho (repo) ở chế độ riêng tư hay không. Nếu làNone(mặc định), kho sẽ ở chế độ công khai trừ khi mặc định của tổ chức là riêng tư. Giá trị này bị bỏ qua nếu kho đã tồn tại. - token (
boolhoặcstr, tùy chọn) — Token được sử dụng làm HTTP bearer authorization cho các tệp từ xa. NếuTrue(mặc định), sẽ sử dụng token được tạo ra khi chạyhf auth login(được lưu trong~/.huggingface). - revision (
str, tùy chọn) — Nhánh để đẩy các tệp đã tải lên. - create_pr (
bool, tùy chọn, mặc định làFalse) — Có tạo PR với các tệp đã tải lên hay commit trực tiếp hay không. - max_shard_size (
inthoặcstr, tùy chọn, mặc định là"50GB") — Chỉ áp dụng cho các model. Kích thước tối đa của một checkpoint trước khi được chia shard. Các checkpoint sau khi chia shard sẽ có kích thước nhỏ hơn giá trị này. Nếu được biểu diễn dưới dạng chuỗi, cần là các chữ số theo sau bởi một đơn vị (ví dụ"5MB"). - tags (
list[str], tùy chọn) — Danh sách các thẻ để đẩy lên Hub.
Tải tệp mô hình lên 🤗 Model Hub.
Ví dụ:
from transformers import AutoModel
model = AutoModel.from_pretrained("google-bert/bert-base-cased")
# Push the model to your namespace with the name "my-finetuned-bert".
model.push_to_hub("my-finetuned-bert")
# Push the model to an organization with the name "my-finetuned-bert".
model.push_to_hub("huggingface/my-finetuned-bert")add_model_tags
< source >( tags: list[str] | str )
Thêm các thẻ tùy chỉnh vào mô hình được đẩy lên Hugging Face Hub. Sẽ không ghi đè lên các thẻ hiện có trong mô hình.
can_generate
< source >( ) → bool
Trả về
bool
Liệu mô hình này có thể tạo ra các chuỗi bằng .generate() hay không.
Trả về giá trị cho biết mô hình này có thể tạo ra các chuỗi bằng .generate() từ GenerationMixin hoặc một lớp có giao diện tương tự hay không.
Bên trong, trên các lớp mà hàm này trả về True, một số thay đổi cụ thể cho quá trình sinh sẽ được kích hoạt:
ví dụ, instance mô hình sẽ có thuộc tính generation_config được gán giá trị.
Một giá trị giả lập cho một đường dẫn có dấu chấm (ví dụ: torch.float32): các chuỗi truy cập thuộc tính, các cuộc gọi hoạt động như các decorator pass-through, repr là đường dẫn có dấu chấm, và việc sử dụng nó như một lớp cơ sở sẽ thay thế bằng một lớp cơ sở type thông thường (PEP 560 __mro_entries__), do đó các lớp con thực sự vẫn giữ nguyên metaclass bình thường và inspect.signature sẽ đọc __init__ thực của chúng thay vì của một mock.
Có thể khử lượng tử hóa mô hình trong trường hợp nó đã được lượng tử hóa bằng một phương pháp lượng tử hóa hỗ trợ khử lượng tử hóa.
Xóa _require_grads_hook.
Bật gradient cho các embedding đầu vào. Điều này hữu ích để tinh chỉnh trọng số adapter trong khi giữ nguyên trọng số của mô hình.
from_pretrained
< source >( pretrained_model_name_or_path: str | os.PathLike | None*model_argsconfig: transformers.configuration_utils.PreTrainedConfig | str | os.PathLike | None = Nonecache_dir: str | os.PathLike | None = Noneignore_mismatched_sizes: bool = Falseforce_download: bool = Falselocal_files_only: bool = Falsetoken: str | bool | None = Nonerevision: str = 'main'use_safetensors: bool | None = Noneweights_only: bool = Truefusion_config: dict[str, bool | dict[str, typing.Any]] | None = Nonedisable_mmap: bool | None = None**kwargs )
Tham số
- pretrained_model_name_or_path (
strhoặcos.PathLike, tùy chọn) — Có thể là:- Một chuỗi, model id của một mô hình được huấn luyện trước được lưu trữ trong một kho mô hình trên huggingface.co.
- Đường dẫn đến thư mục chứa trọng số mô hình được lưu bằng
save_pretrained(), ví dụ:
./my_model_directory/. Các thư mục được lưu bằngsave_pretrained(..., distributed_checkpoint=True)sẽ được phát hiện và tải bằng distributed checkpointing (DCP), giữ nguyên mesh và placements hiện tại của mô hình. Điều này yêu cầutorch>=2.7và tải nghiêm ngặt: mọi khóa của mô hình phải có mặt trong checkpoint. Nonenếu bạn cung cấp cả cấu hình và từ điển trạng thái (tương ứng với các tham số từ khóaconfigvàstate_dict).
- model_args (chuỗi các đối số vị trí, tùy chọn) —
Tất cả các đối số vị trí còn lại sẽ được truyền đến phương thức
__init__của model cơ sở. - config (
Union[PreTrainedConfig, str, os.PathLike], tuỳ chọn) — Có thể là:- một instance của một class kế thừa từ PreTrainedConfig,
- một chuỗi hoặc đường dẫn hợp lệ làm đầu vào cho from_pretrained().
Cấu hình cho mô hình cần sử dụng thay vì cấu hình được tải tự động. Cấu hình có thể được tải tự động khi:
- Mô hình là một mô hình do thư viện cung cấp (được nạp bằng chuỗi model id của một mô hình đã được huấn luyện trước).
- Mô hình đã được lưu bằng save_pretrained() và được nạp lại bằng cách cung cấp thư mục lưu.
- Mô hình được nạp bằng cách cung cấp một thư mục cục bộ dưới dạng
pretrained_model_name_or_pathvà một tệp cấu hình JSON có tên config.json được tìm thấy trong thư mục đó.
- state_dict (
dict[str, torch.Tensor], tuỳ chọn) — Một từ điển trạng thái để sử dụng thay cho từ điển trạng thái được tải từ tệp trọng số đã lưu. Tùy chọn này có thể được sử dụng nếu bạn muốn tạo một mô hình từ cấu hình được huấn luyện trước nhưng tải trọng số của riêng bạn. Tuy nhiên, trong trường hợp này, bạn nên kiểm tra xem việc sử dụng save_pretrained() và from_pretrained() có phải là tùy chọn đơn giản hơn hay không.Tùy chọn này có thể được sử dụng nếu bạn muốn tạo một model từ một cấu hình đã được huấn luyện trước nhưng tải trọng số của riêng bạn. Tuy nhiên, trong trường hợp này, bạn nên kiểm tra xem việc sử dụng save_pretrained() và from_pretrained() có phải là một tùy chọn đơn giản hơn hay không.
- cache_dir (
Union[str, 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 đệm nếu không sử dụng bộ lưu đệm tiêu chuẩn. - ignore_mismatched_sizes (
bool, tùy chọn, mặc định làFalse) — Có nên gây ra lỗi nếu một số trọng số từ checkpoint không có cùng kích thước với trọng số của mô hình hay không (ví dụ, nếu bạn khởi tạo một mô hình với 10 nhãn từ một checkpoint có 3 nhãn). - force_download (
bool, tùy chọn, mặc định làFalse) — Có nên buộc tải lại (re-download) trọng số mô hình và các tệp cấu hình, 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. - output_loading_info(
bool, optional, mặc định làFalse) — Có nên trả về một từ điển chứa các khóa bị thiếu, các khóa không mong đợi và thông báo lỗi hay không. - local_files_only(
bool, tuỳ chọn, mặc định làFalse) — Có chỉ xem các tệp cục bộ hay không (tức là không cố gắng tải xuống mô hình). - 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>". - attn_implementation (
str, tuỳ chọn) — Cài đặt attention cần sử dụng trong mô hình (nếu có liên quan). Có thể là một trong các giá trị"eager"(thực hiện thủ công của attention)"sdpa"(sử dụngF.scaled_dot_product_attention)"flash_attention_2"(sử dụng Dao-AILab/flash-attention)"flash_attention_3"(sử dụng Dao-AILab/flash-attention/hopper)"flash_attention_4"(sử dụng Dao-AILab/flash-attention/flash_attn/cute). Mặc định, nếu khả dụng, SDPA sẽ được sử dụng. Nếu không, mặc định sẽ là triển khai"eager"thủ công.
Chấp nhận các tham chiếu kernel HF dưới dạng:
/ [@ ][: ] và là các chuỗi không chứa "/" và không chứa ":" bất kỳ. - “@
” là tùy chọn (branch, tag, hoặc commit-ish), ví dụ “@main”, “@v1.2.0”, “@abc123”. - ”:
” là tùy chọn và dùng để chọn một hàm bên trong kho kernel. - Cả hai tùy chọn có thể xuất hiện cùng lúc và chỉ theo thứ tự này: @revision trước, sau đó là :kernel_name.
- Chúng tôi cố ý cho phép tiền tố “
|” ở đầu (ví dụ: “flash|…”) vì mã sẽ loại bỏ nó trước khi tải; ký tự ’|’ không bị loại trừ trong các lớp ký tự ở đây.
Các ví dụ khớp: “org/model” “org/model@main” “org/model:custom_kernel” “org/[email protected]:custom_kernel”
- experts_implementation (
str, tùy chọn) — Cài đặt chuyên gia (experts) được sử dụng trong mô hình (nếu có liên quan). Có thể là một trong các tùy chọn sau:"eager"(thực hiện tuần tự các phép nhân ma trận của các chuyên gia)."batched_mm"(sử dụngtorch.bmm)."grouped_mm"(sử dụngtorch.nn.functional.grouped_mm).
Mặc định, nếu model hỗ trợ,
"grouped_mm"sẽ được sử dụng. Nếu không, mặc định sẽ là cài đặt"eager"thủ công.
Các tham số cho suy luận mô hình lớn
- dtype (
strhoặctorch.dtype, tuỳ chọn, mặc định là"auto") — Ghi đètorch_dtypevà tải mô hình vớidtype. Các tuỳ chọn khác nhau là:-
torch.float16hoặctorch.bfloat16hoặctorch.float: tải vớidtypeđược chỉ định, bỏ quaconfig.dtypecủa mô hình nếu có. Nếu không được chỉ định- mô hình sẽ được nạp vào ở
torch.float(fp32).
- mô hình sẽ được nạp vào ở
-
"auto"- Một mụcdtypehoặctorch_dtypetrong tệpconfig.jsoncủa mô hình sẽ được cố gắng sử dụng. Nếu không tìm thấy mục này, hãy kiểm tradtypecủa trọng số đầu tiên trong checkpoint có kiểu số dấu phẩy động và sử dụng nó làmdtype. Thao tác này sẽ tải mô hình bằngdtypemà nó được lưu ở cuối quá trình huấn luyện. Nó không thể được dùng làm chỉ báo cho cách mô hình được huấn luyện. Vì mô hình có thể được huấn luyện bằng một trong các dtype độ chính xác nửa, nhưng được lưu ở fp32. -
Một chuỗi là một
torch.dtypehợp lệ. Ví dụ, “float32” sẽ tải mô hình ởtorch.float32, “float16” sẽ tải ởtorch.float16, v.v.
Đối với một số mô hình,
dtypemà chúng được huấn luyện là không rõ ràng - bạn có thể thử kiểm tra bài báo của mô hình hoặc liên hệ với các tác giả và yêu cầu họ thêm thông tin này vào thẻ mô hình và chèn mụcdtypehoặctorch_dtypetrongconfig.jsontrên hub. -
- device_map (
strhoặcdict[str, Union[int, str, torch.device]]hoặcinthoặctorch.device, tuỳ chọn) — Một bản đồ chỉ định vị trí của từng submodule. Không cần chi tiết đến tên từng parameter/buffer; một khi tên module đã được đưa vào, mọi submodule của nó sẽ được chuyển đến cùng một thiết bị. Nếu chỉ truyền thiết bị (e.g.,"cpu","cuda:1","mps", hoặc thứ tự GPU như1) mà mô hình sẽ được cấp phát, bản đồ thiết bị sẽ ánh xạ toàn bộ mô hình sang thiết bị này. Truyềndevice_map = 0có nghĩa là đặt toàn bộ mô hình trên GPU 0.Để Accelerate tự động tính toán
device_mapđược tối ưu nhất, hãy đặtdevice_map="auto". Để biết thêm thông tin về từng tùy chọn, xem thiết kế bản đồ thiết bị. - max_memory (
Dict, tùy chọn) — Một từ điển ánh xạ định danh thiết bị đến bộ nhớ tối đa khi sử dụngdevice_map. Nếu không được đặt, giá trị mặc định sẽ là bộ nhớ tối đa khả dụng cho mỗi GPU và RAM CPU khả dụng. - distributed_config (DistributedConfig, tùy chọn) —
Cấu hình cho việc nạp phân phối bản địa với song song tensor hoặc FSDP2. Truyền
DistributedConfig(tp_size=N)để sử dụng kế hoạch song song tensor được định nghĩa trước của mô hình,DistributedConfig(tp_plan=...)để chỉ định một kế hoạch song song tensor, hoặcDistributedConfig(fsdp_size=N)cho FSDP2. Yêu cầutorchrunvà một nhóm tiến trình đã được khởi tạo khitp_size > 1hoặcfsdp_size > 1. Loại trừ lẫn nhau vớidevice_map. - device_mesh (
torch.distributed.DeviceMesh, tùy chọn) — Một torch device mesh. Nếu không được cung cấp, giá trị mặc định sẽ là world size. Hiện tại chỉ được sử dụng cho tensor parallel. Nếu được cung cấp, nó phải chứa chiều có tên là"tp"trong trường hợp nó có nhiều hơn 1 chiều, chiều này sẽ được sử dụng cho tensor parallelism - offload_folder (
strhoặcos.PathLike, tùy chọn) — Nếudevice_mapchứa bất kỳ giá trị nào là"disk", đây là thư mục nơi chúng ta sẽ offload trọng số. - offload_buffers (
bool, tùy chọn) — Có offload các buffer cùng với các tham số của mô hình hay không. - quantization_config (
Union[QuantizationConfigMixin,Dict], tùy chọn) — Một từ điển các tham số cấu hình hoặc một đối tượng QuantizationConfigMixin cho lượng tử hóa (ví dụ bitsandbytes, gptq). - 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. - variant (
str, tùy chọn) — Nếu được chỉ định, tải trọng số từ tên tệpvariant, vd. pytorch_model..bin. - use_safetensors (
bool, tùy chọn, mặc định làNone) — Có sử dụng checkpointsafetensorshay không. Mặc định làNone. Nếu không được chỉ định vàsafetensorschưa được cài đặt, giá trị sẽ được đặt thànhFalse. - weights_only (
bool, tùy chọn, mặc định làTrue) — Chỉ định xem unpickler có bị giới hạn để chỉ tải các tensor, các kiểu dữ liệu nguyên thủy, các từ điển và bất kỳ kiểu nào được thêm thông qua torch.serialization.add_safe_globals() hay không. Khi đặt thành False, chúng ta có thể tải trọng số của các lớp con tensor bọc (wrapper tensor subclass). - disable_mmap (
bool, tùy chọn) — Có vô hiệu hóa ánh xạ bộ nhớ khi nạp checkpoint safetensors hay không. KhiNone(mặc định), giá trị này được tự động phát hiện thànhTruekhi checkpoint nằm trên hệ thống tệp FUSEhf-mount(được sử dụng bởi HF Spaces/Endpoints), nơi mà mmap + các lỗi trang song song có thể gây deadlock. KhiTrue, các tệp được đọc hoàn toàn vào bộ nhớ và được phân tích bằngsafetensors.torch.load. KhiFalse, trình nạp ánh xạ bộ nhớ mặc định luôn được sử dụng. - fusion_config (
dict[str, bool | dict[str, Any]], tuỳ chọn) — Cấu hình fusion tuỳ chọn được áp dụng trước khi khởi tạo mô hình. Mỗi key kích hoạt một nhóm fusion và giá trị của nó có thể làTrueđể kích hoạt fusion đó với các tuỳ chọn mặc định, hoặc một từ điển chứa các tuỳ chọn cụ thể cho từng nhóm. Ví dụ,{"patch_embeddings": True}kích hoạt fusion patch embedding. Tham số này chỉ nên được sử dụng như một tối ưu hoá cho suy luận, vì nó có thể làm thay đổi nhẹ đầu ra. Nếu bị bỏ qua,from_pretrained()sẽ quay về dùngconfig.fusion_configkhi có sẵn. Xem hướng dẫn ánh xạ fusion trongdocs/source/en/fusion_mapping.mdđể biết thêm chi tiết. - key_mapping (`dict[str, str], tuỳ chọn) — Bản ánh xạ tiềm năng cho tên trọng số nếu sử dụng một mô hình trên Hub tương thích với kiến trúc của Transformers nhưng chưa được chuyển đổi tương ứng.
- kwargs (từ điển các tham số keyword còn lại, tùy chọn) —
Có thể được sử dụng để cập nhật đối tượng cấu hình (sau khi nó được tải) và khởi tạo mô hình (ví dụ,
output_attentions=True). Hành vi khác nhau tùy thuộc vào việc có cung cấpconfighay không hoặc được tải tự động:- Nếu một cấu hình được cung cấp thông qua
config,**kwargssẽ được truyền trực tiếp đến phương thức__init__của model bên dưới (chúng tôi giả định rằng tất cả các cập nhật liên quan đến cấu hình đã được thực hiện) - Nếu không cung cấp cấu hình,
kwargssẽ được truyền trước tiên đến hàm khởi tạo của lớp cấu hình (from_pretrained()). Mỗi khóa củakwargstương ứng với một thuộc tính cấu hình sẽ được dùng để ghi đè thuộc tính đó bằng giá trịkwargsđược cung cấp. Các khóa còn lại không tương ứng với bất kỳ thuộc tính cấu hình nào sẽ được truyền đến hàm__init__của mô hình cơ sở.
- Nếu một cấu hình được cung cấp thông qua
Tạo một mô hình pytorch được huấn luyện trước từ cấu hình của một mô hình đã được huấn luyện trước.
Mặc định, mô hình được đặt ở chế độ đánh giá bằng model.eval() (các module Dropout bị vô hiệu hóa). Để huấn luyện mô hình, bạn cần đặt lại nó về chế độ huấn luyện bằng model.train().
Cảnh báo Weights from XXX not initialized from pretrained model có nghĩa là trọng số của XXX không được khởi tạo từ mô hình được huấn luyện trước cùng với phần còn lại của mô hình. Bạn cần tự huấn luyện các trọng số này bằng một tác vụ tinh chỉnh (fine-tuning) cho nhiệm vụ cụ thể.
Cảnh báo Weights from XXX not used in YYY có nghĩa là lớp XXX không được sử dụng bởi YYY, do đó các trọng số đó sẽ bị loại bỏ.
Kích hoạt “offline-mode” đặc biệt để sử dụng phương pháp này trong môi trường có tường lửa.
Ví dụ:
>>> from transformers import BertConfig, BertModel
>>> # Download model and configuration from huggingface.co and cache.
>>> model = BertModel.from_pretrained("google-bert/bert-base-uncased")
>>> # Model was saved using *save_pretrained('./test/saved_model/')* (for example purposes, not runnable).
>>> model = BertModel.from_pretrained("./test/saved_model/")
>>> # Update configuration during loading.
>>> model = BertModel.from_pretrained("google-bert/bert-base-uncased", output_attentions=True)
>>> assert model.config.output_attentions == Trueget_compiled_call
< source >( compile_config: transformers.generation.configuration_utils.CompileConfig | None )
Trả về phiên bản đã được torch.compile của self.__call__. Điều này hữu ích để lựa chọn động giữa forward không biên dịch/biên dịch trong quá trình suy luận, đặc biệt là để chuyển đổi giữa prefill (nơi chúng ta không muốn dùng phiên bản biên dịch để tránh tính toán lại đồ thị với các hình dạng mới) và giải mã lặp (nơi chúng ta muốn tận dụng tốc độ nhanh hơn của phiên bản biên dịch với các hình dạng tĩnh).
Tra cứu theo nỗ lực tốt nhất của module decoder.
Thứ tự các lần thử (bao phủ ~85 % các trường hợp sử dụng hiện tại):
self.decoder/self.language_model/self.text_modelself.base_model(nhiều lớp bọc lưu bộ giải mã tại đây)self.base_model.get_decoder()(các lớp bọc lồng nhau)- fallback: raise cho một số ít mô hình đặc biệt cần quy tắc riêng
Tra cứu theo nỗ lực tốt nhất cho module encoder. Nếu được cung cấp đối số modality,
nó sẽ tìm kiếm encoder cụ thể cho từng modality trong các model đa phương thức (ví dụ: “image_encoder”)
Mặc định, hàm này trả về text encoder của model nếu có, nếu không sẽ trả về self.
Các giá trị modality có thể là “image”, “video” và “audio”.
Trả về các khóa trọng lượng liên kết đã được mở rộng (trong trường hợp chúng chứa các module hoặc mẫu regex) chỉ cho model hiện tại, hoặc đệ quy cho tất cả các submodel nếu all_submodels=True (tức là nó sẽ kiểm tra lại các giá trị config cho tất cả các submodel).
Với hầu hết các mô hình, chúng ta chỉ cần liên kết các embedding, do đó mô hình có một thuộc tính nội bộ _tied_weights_keys = {"lm_head.weight": "model.embed_tokens.weight"}. Trong trường hợp này, ánh xạ đã được
“mở rộng”, tức là nó đã chứa các tham số đầy đủ, và hàm này sẽ đơn giản trả về một bản sao của thuộc tính đó.
Với các mẫu phức tạp hơn, ví dụ với DFineForObjectDetection, chúng ta có thuộc tính sau
_tied_weights_keys = {
r"bbox_embed.(?![0])\d+": "bbox_embed.0",
r"class_embed.(?![0])\d+": "class_embed.0",
"model.decoder.class_embed": "class_embed",
"model.decoder.bbox_embed": "bbox_embed",
}trả về các giá trị sau:
{
'bbox_embed.1.layers.0.bias': 'bbox_embed.0.layers.0.bias',
'bbox_embed.1.layers.0.weight': 'bbox_embed.0.layers.0.weight',
'bbox_embed.1.layers.1.bias': 'bbox_embed.0.layers.1.bias',
'bbox_embed.1.layers.1.weight': 'bbox_embed.0.layers.1.weight',
'bbox_embed.1.layers.2.bias': 'bbox_embed.0.layers.2.bias',
'bbox_embed.1.layers.2.weight': 'bbox_embed.0.layers.2.weight',
'bbox_embed.2.layers.0.bias': 'bbox_embed.0.layers.0.bias',
'bbox_embed.2.layers.0.weight': 'bbox_embed.0.layers.0.weight',
...
'class_embed.1.bias': 'class_embed.0.bias',
'class_embed.1.weight': 'class_embed.0.weight',
'class_embed.2.bias': 'class_embed.0.bias',
'class_embed.2.weight': 'class_embed.0.weight',
...
'model.decoder.class_embed.0.bias': 'class_embed.0.bias',
'model.decoder.class_embed.0.weight': 'class_embed.0.weight',
'model.decoder.class_embed.1.bias': 'class_embed.0.bias',
'model.decoder.class_embed.1.weight': 'class_embed.0.weight',
...
'model.decoder.bbox_embed.0.layers.0.bias': 'bbox_embed.0.layers.0.bias',
'model.decoder.bbox_embed.0.layers.0.weight': 'bbox_embed.0.layers.0.weight',
'model.decoder.bbox_embed.0.layers.1.bias': 'bbox_embed.0.layers.1.bias',
'model.decoder.bbox_embed.0.layers.1.weight': 'bbox_embed.0.layers.1.weight',
...
}Trả về cài đặt chuyên gia của mô hình này và các mô hình con của nó, dưới dạng dict được chấp nhận bởi set_experts_implementation ("" cho mô hình này, và một mục cho mỗi sub_config). Đây là hàm tương ứng của set_experts_implementation, ví dụ để chụp lại cài đặt hiện tại và khôi phục nó sau đó.
get_memory_footprint
< source >( return_buffers = True )
Tham số
- return_buffers (
bool, tùy chọn, mặc định làTrue) — Có nên trả về kích thước của các tensor buffer trong quá trình tính toán mức sử dụng bộ nhớ hay không. Buffer là các tensor không yêu cầu gradient và không được đăng ký dưới dạng tham số. Ví dụ: mean và std trong các lớp batch norm. Vui lòng xem: https://discuss.pytorch.org/t/what-pytorch-means-by-buffers/120266/2
Lấy dấu chân bộ nhớ của một mô hình. Hàm này sẽ trả về dấu chân bộ nhớ của mô hình hiện tại tính bằng byte. Có ích để đo lường dấu chân bộ nhớ của mô hình hiện tại và thiết kế một số bài kiểm tra. Giải pháp được lấy cảm hứng từ các cuộc thảo luận trên PyTorch: https://discuss.pytorch.org/t/gpu-memory-that-model-uses/56822/2
Trả về tham số hoặc bộ đệm được chỉ định bởi target nếu nó tồn tại, nếu không sẽ ném ra một lỗi. Hàm này kết hợp get_parameter() và get_buffer() trong một hàm tiện dụng duy nhất. Nếu mục tiêu là thuộc tính _extra_state, nó sẽ trả về trạng thái bổ sung do module cung cấp. Lưu ý rằng nó chỉ hoạt động nếu target là một lá của mô hình.
Tắt gradient checkpointing cho mô hình hiện tại.
gradient_checkpointing_enable
< source >( gradient_checkpointing_kwargs = Noneevery_n_layers: int = 1offload: bool = False )
Tham số
- every_n_layers (
int, tuỳ chọn, mặc định là 1) — Chỉ checkpoint mỗievery_n_layerslớp decoder, để các lớp còn lại giữ nguyên activation.1sẽ checkpoint mọi lớp, đây là hành vi tất cả hoặc không thông thường. Các giá trị lớn hơn đánh đổi bộ nhớ lấy tốc độ, điều này đáng giá khi bộ nhớ được giải phóng nhờ checkpoint toàn bộ sẽ không được sử dụng. - offload (
bool, tuỳ chọn, mặc định làFalse) — Giữ các activation được lưu lại để recompute trong bộ nhớ host được ghim (pinned host memory) thay vì trên bộ tăng tốc. Điều này giải phónglayers x sequence x hiddenbyte bộ nhớ thiết bị, vốn là thành phần chiếm ưu thế ở độ dài sequence lớn, và phát sinh một bản sao từ thiết bị sang host trong bước forward và một bản sao từ host sang thiết bị trong bước backward. Cả hai bản sao đều chạy trên luồng tính toán, do đó bước này sẽ chậm hơn. - gradient_checkpointing_kwargs (dict, tùy chọn) —
Các đối số từ khóa bổ sung được truyền đến hàm
torch.utils.checkpoint.checkpoint.
Kích hoạt gradient checkpointing cho mô hình hiện tại.
Chúng ta truyền phương thức __call__ của các module thay vì forward vì __call__ gắn tất cả các hook của module. https://discuss.pytorch.org/t/any-different-between-model-input-and-model-forward-input/3690/2
Khởi tạo và liên kết các trọng số nếu cần. Nếu sử dụng PreTrainedModel tùy chỉnh, bạn cần triển khai bất kỳ logic khởi tạo nào trong _init_weights.
Điều này tương đương với việc gọi self.apply(self._initialize_weights), nhưng xử lý đúng các mô hình tổ hợp.
Hàm này phân phát động hàm init_weights đúng đến các module khi chúng ta tiến sâu trong đồ thị module dọc theo đệ quy. Nó có thể xử lý một số lượng tùy ý các mô hình con. Nếu không có nó, mọi mô hình tổ hợp sẽ phải đệ quy lần thứ hai trên tất cả các mô hình con một cách tường minh trong _init_weights ngoài cùng, điều này cực kỳ dễ gây lỗi và kém hiệu quả.
Trả về giá trị cho biết mô hình hiện tại có phải là mã tùy chỉnh hay không, tức là mã được tải từ hub hoặc được định nghĩa trong bất kỳ module/phân vùng người dùng cụ thể nào.
Trả về việc mô hình hiện tại có phải là mã tùy chỉnh, tức là mã được tải từ hub, hay là lớp mà chúng ta vừa đăng ký thông qua register_for_auto_class hay không.
Thêm cờ _is_hf_initialized vào các tham số sẽ được liên kết, nhằm tránh việc khởi tạo chúng
sau này vì chúng sẽ được liên kết (ghi đè) dù sao đi nữa.
Điều này rất quan trọng vì hầu hết các embedding đều được liên kết, và chúng là các tham số rất lớn (bảng từ vựng thường là 256k), nên
việc chạy khởi tạo trên chúng rất tốn kém.
Tương tự như named_buffers, nhưng chỉ trả về các buffer không bền vững. Tính năng này rất hữu ích vì không phải lúc nào cũng dễ dàng để biết chúng có bền vững hay không
Một phương thức được thực thi ở cuối quá trình khởi tạo của mỗi mô hình Transformer, nhằm chạy các đoạn mã cần các module của mô hình được khởi tạo đúng cách (chẳng hạn như khởi tạo trọng số). Nó cũng được sử dụng để thu thập tất cả các thuộc tính tĩnh chính xác (kế hoạch song song, tied_weights_keys, _keep_in_fp32_modules, v.v.) một cách đúng đắn trong trường hợp các mô hình tổ hợp (tức là, mô hình cấp trên cần biết về các thuộc tính đó từ các con của nó).
register_for_auto_class
< source >( auto_class = 'AutoModel' )
Đăng ký lớp này với một lớp auto cho trước. Chỉ nên sử dụng cho các mô hình tùy chỉnh vì các mô hình trong thư viện đã được ánh xạ với một lớp auto.
resize_token_embeddings
< source >( new_num_tokens: int | None = Nonepad_to_multiple_of: int | None = Nonemean_resizing: bool = True ) → torch.nn.Embedding
Tham số
- new_num_tokens (
int, tuỳ chọn) — Số lượng token mới trong ma trận nhúng. Việc tăng kích thước sẽ thêm các vector được khởi tạo mới vào cuối. Việc giảm kích thước sẽ loại bỏ các vector từ cuối. Nếu không được cung cấp hoặc làNone, chỉ trả về con trỏ đến moduletorch.nn.Embeddingcủa các token đầu vào của mô hình mà không thực hiện bất kỳ thao tác nào. - pad_to_multiple_of (
int, tuỳ chọn) — Nếu được đặt, ma trận nhúng sẽ được đệm (pad) đến bội số của giá trị được cung cấp. Nếunew_num_tokensđược đặt thànhNonethì chỉ đệm ma trận nhúng đến bội số củapad_to_multiple_of.Điều này đặc biệt hữu ích để cho phép sử dụng Tensor Cores trên phần cứng NVIDIA có khả năng tính toán
>= 7.5(Volta), hoặc trên TPU, nơi mà việc có độ dài chuỗi là bội số của 128 sẽ mang lại lợi ích. Để biết thêm chi tiết về điều này, hoặc cần hỗ trợ trong việc chọn giá trị phù hợp để thay đổi kích thước, hãy tham khảo hướng dẫn này: https://docs.nvidia.com/deeplearning/performance/dl-performance-matrix-multiplication/index.html#requirements-tc - mean_resizing (
bool) — Liệu có khởi tạo các embedding được thêm vào từ một phân phối chuẩn đa biến có trung bình và hiệp phương sai của các embedding cũ, hay khởi tạo chúng bằng một phân phối chuẩn có trung bình bằng 0 và độ lệch chuẩn bằngconfig.initializer_range.Đặt
mean_resizingthànhTruehữu ích khi tăng kích thước của các embedding trong các mô hình ngôn ngữ nhân quả, trong đó xác suất của các token được tạo ra sẽ không bị ảnh hưởng bởi các embedding được thêm vào, vì việc khởi tạo các embedding mới bằng giá trị trung bình của các embedding cũ sẽ làm giảm kl-divergence giữa xác suất token tiếp theo trước và sau khi thêm các embedding mới. Tham khảo bài viết này để biết thêm thông tin: https://nlp.stanford.edu/~johnhew/vocab-expansion.html
Trả về
torch.nn.Embedding
Trỏ đến Module Embedding của các token đầu vào của mô hình.
Đổi kích thước ma trận nhúng token đầu vào của mô hình nếu new_num_tokens != config.vocab_size.
Chịu trách nhiệm liên kết trọng số nhúng sau đó nếu lớp mô hình có phương thức tie_weights().
save_pretrained
< source >( save_directory: str | os.PathLikeis_main_process: bool = Truestate_dict: dict | None = Nonepush_to_hub: bool = Falsemax_shard_size: int | str = '50GB'variant: str | None = Nonetoken: str | bool | None = Nonesave_peft_format: bool = Truesave_original_format: bool = Truedistributed_checkpoint: bool = False**kwargs )
Tham số
- save_directory (
strhoặcos.PathLike) — Thư mục để lưu. Sẽ được tạo nếu chưa tồn tại. - is_main_process (
bool, tùy chọn, mặc định làTrue) — Xác định xem tiến trình gọi hàm này có phải là tiến trình chính hay không. Hữu ích khi huấn luyện phân tán như trên TPU và cần gọi hàm này trên tất cả các tiến trình. Trong trường hợp này, chỉ đặtis_main_process=Truetrên tiến trình chính để tránh điều kiện đua. - state_dict (từ điển lồng nhau của
torch.Tensor) — Từ điển trạng thái của mô hình cần lưu. Mặc định sẽ làself.state_dict(), nhưng có thể được dùng để chỉ lưu một phần của mô hình hoặc khi cần các biện pháp đặc biệt khi khôi phục từ điển trạng thái của mô hình (ví dụ khi sử dụng song song hóa mô hình). - 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). - max_shard_size (
inthoặcstr, tuỳ chọn, mặc định là"50GB") — Kích thước tối đa của một checkpoint trước khi được chia shard. Các checkpoint shard sau đó sẽ có kích thước nhỏ hơn mức này. Nếu được biểu diễn dưới dạng chuỗi, cần là các chữ số theo sau bởi một đơn vị (như"5MB").Nếu một trọng số đơn lẻ của mô hình lớn hơn
max_shard_size, nó sẽ nằm trong một shard checkpoint riêng, có kích thước lớn hơnmax_shard_size. - variant (
str, tùy chọn) — Nếu được chỉ định, trọng số sẽ được lưu ở định dạng model..safetensors. - 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). - save_peft_format (
bool, tùy chọn, mặc định làTrue) — Để đảm bảo tương thích ngược với thư viện PEFT, trong trường hợp trọng số adapter được gắn vào mô hình, tất cả các khóa trong state dict của adapter cần được thêm tiền tốbase_model.model. Người dùng nâng cao có thể tắt hành vi này bằng cách đặtsave_peft_formatthànhFalse. - save_original_format (
bool, tùy chọn, mặc định làTrue) — Để tương thích ngược với các phiên bản trước củatransformers, bạn có thể lưu checkpoint với ánh xạ ngược của nó. Ánh xạ ngược cần phải tồn tại ngay cả khi mô hình được nạp từ một checkpoint legacy None. - distributed_checkpoint (
bool, tùy chọn, mặc định làFalse) — Khi lưu một mô hình được chia shard bằng FSDP hoặc TP, hãy ghi safetensors bằng distributed checkpointing (DCP) thay vì gom các trọng số về CPU trước. Mọi rank đều phải gọi phương thức này. KhiFalse, các trọng số sẽ được gom về CPU trên rank 0 thông quagather_full_state_dicttrước khi ghi. Nó chỉ được thiết kế để lưu và tiếp tục huấn luyện, hãy đặt thànhFalsenếu bạn muốn đầy đủ các tính năng củasave_pretrained. Vớipush_to_hub=True, rank 0 sẽ hợp nhất checkpoint trong một thư mục conconsolidated/và tải lên thư mục đó. Yêu cầutorch>=2.7. - 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 một mô hình và tệp cấu hình của nó vào một thư mục, để có thể tải lại bằng phương thức lớp from_pretrained().
set_attn_implementation
< source >( attn_implementation: str | dictallow_all_kernels: bool = False )
Tham số
- attn_implementation (
strhoặcdict) — Cài đặt thực hiện attention cho model này. Giá trị có thể là mộtstr, khi đó nó sẽ được phân phối đến tất cả các submodel nếu liên quan, hoặc mộtdicttrong đó các key là tên của sub_configs, khi đó mỗi submodel sẽ phân phối giá trị tương ứng (cho chính nó và tất cả các submodel lồng bên trong nó). Một giá trị có thể tự nó là mộtdictcùng định dạng, để nhắm đến các sub_configs của submodel đó (như khi khởi tạo một config với một dictattn_implementationlồng nhau). - allow_all_kernels (
bool, tùy chọn) — Có nên nạp kernels từ các hub repos chưa được xác minh hay không, nếuattn_implementationlà một kernel tùy chỉnh nằm ngoài hub repositorykernels-community.
Đặt attn_implementation được yêu cầu cho mô hình này.
Setter đối xứng. Phản ánh logic tra cứu được sử dụng trong get_decoder.
Setter đối xứng. Phản ánh logic tra cứu được sử dụng trong get_encoder.
set_experts_implementation
< source >( experts_implementation: str | dict )
Tham số
- experts_implementation (
strhoặcdict) — Cài đặt chuyên gia (experts implementation) cho mô hình này. Nó có thể là mộtstr, trong trường hợp đó nó sẽ được phân phối đến tất cả các mô hình con nếu phù hợp, hoặc mộtdicttrong đó các khóa là tên của sub_configs, trong trường hợp đó mỗi mô hình con sẽ phân phối giá trị tương ứng.
Đặt experts_implementation được yêu cầu cho mô hình này.
set_use_kernels
< source >( use_kernelskernel_config: transformers.utils.kernel_config.KernelConfig | None = Nonemode: Mode | None = None )
Tham số
- use_kernels (
bool) — Có sử dụng thư việnkernelsđể kernelize một số lớp của mô hình hay không. - kernel_config (
KernelConfig, tùy chọn) — Cấu hình kernel để sử dụng nhằm kernel hóa mô hình. Nếu làNone, ánh xạ kernel mặc định sẽ được sử dụng. - mode (
Mode, tùy chọn) — Chế độ cần được áp dụng trong quá trìnhkernelize. Tùy chọn, mặc định là chế độ huấn luyện hoặc suy luận dựa trên cờtrainingbên trong.
Đặt xem có sử dụng thư viện kernels để kernelize một số lớp của mô hình hay không.
Gắn các trọng số mô hình. Nếu recompute_mapping=False (mặc định khi được gọi bên trong), nó sẽ dựa vào thuộc tính model.all_tied_weights_keys, chứa ánh xạ {target: source} cho các tham số được gắn.
Nếu recompute_mapping=True, nó sẽ kiểm tra lại tất cả các mô hình con bên trong và cấu hình của chúng để xác định các tham số cần được gắn. Đây là mặc định khi model.tie_weights() được gọi độc lập, bên ngoài __init__ và from_pretrained, trong trường hợp các giá trị cấu hình đã bị thay đổi ở đâu đó.
Lưu ý rằng trong quá trình from_pretrained, việc liên kết là đối xứng: nếu ánh xạ ghi “tie target -> source” nhưng source không có trong checkpoint trong khi target tồn tại, chúng ta sẽ đảo source và target để vẫn có thể liên kết mọi thứ với tham số thực sự tồn tại.
Một giá trị giả lập cho một đường dẫn có dấu chấm (ví dụ: torch.float32): các chuỗi truy cập thuộc tính, các cuộc gọi hoạt động như các decorator pass-through, repr là đường dẫn có dấu chấm, và việc sử dụng nó như một lớp cơ sở sẽ thay thế bằng một lớp cơ sở type thông thường (PEP 560 __mro_entries__), do đó các lớp con thực sự vẫn giữ nguyên metaclass bình thường và inspect.signature sẽ đọc __init__ thực của chúng thay vì của một mock.
Hiển thị một cảnh báo một lần nếu input_ids dường như chứa padding và không có attention mask nào được cung cấp.
Các model tùy chỉnh cũng nên bao gồm _supports_assign_param_buffer, dùng để xác định xem superfast init có thể áp dụng cho model cụ thể đó hay không. Dấu hiệu cho thấy model của bạn cần thuộc tính này là khi test_save_and_load_from_pretrained bị lỗi. Nếu đúng như vậy, hãy đặt giá trị này thành False.
ModuleUtilsMixin
Một số tiện ích cho torch.nn.Modules, được sử dụng như một mixin.
số_tham_số
< source >( only_trainable: bool = Falseexclude_embeddings: bool = False ) → int
Lấy số lượng tham số (tùy chọn, có thể huấn luyện hoặc không phải nhúng) trong module.
Đẩy lên Hub
Một Mixin chứa chức năng để đẩy một model hoặc tokenizer lên hub.
push_to_hub
< source >( repo_id: strcommit_message: str | None = Nonecommit_description: str | None = Noneprivate: bool | None = Nonetoken: bool | str | None = Nonerevision: str | None = Nonecreate_pr: bool = Falsemax_shard_size: int | str | None = '50GB'tags: list[str] | None = None )
Tham số
- repo_id (
str) — Tên của kho mà bạn muốn đẩy {object} đến. Nó nên chứa tên tổ chức của bạn khi đẩy đến một tổ chức cụ thể. - commit_message (
str, tùy chọn) — Thông điệp để commit khi đẩy. Mặc định là"Upload {object}". - commit_description (
str, tùy chọn) — Mô tả của commit sẽ được tạo - private (
bool, optional) — Xác định có làm cho kho (repo) ở chế độ riêng tư hay không. Nếu làNone(mặc định), kho sẽ ở chế độ công khai trừ khi mặc định của tổ chức là riêng tư. Giá trị này bị bỏ qua nếu kho đã tồn tại. - token (
boolhoặcstr, tùy chọn) — Token được sử dụng làm HTTP bearer authorization cho các tệp từ xa. NếuTrue(mặc định), sẽ sử dụng token được tạo ra khi chạyhf auth login(được lưu trong~/.huggingface). - revision (
str, tùy chọn) — Nhánh để đẩy các tệp đã tải lên. - create_pr (
bool, tùy chọn, mặc định làFalse) — Có tạo PR với các tệp đã tải lên hay commit trực tiếp hay không. - max_shard_size (
inthoặcstr, tùy chọn, mặc định là"50GB") — Chỉ áp dụng cho các model. Kích thước tối đa của một checkpoint trước khi được chia shard. Các checkpoint sau khi chia shard sẽ có kích thước nhỏ hơn giá trị này. Nếu được biểu diễn dưới dạng chuỗi, cần là các chữ số theo sau bởi một đơn vị (ví dụ"5MB"). - tags (
list[str], tùy chọn) — Danh sách các thẻ để đẩy lên Hub.
Tải {object_files} lên 🤗 Model Hub.
Ví dụ:
from transformers import {object_class}
{object} = {object_class}.from_pretrained("google-bert/bert-base-cased")
# Push the {object} to your namespace with the name "my-finetuned-bert".
{object}.push_to_hub("my-finetuned-bert")
# Push the {object} to an organization with the name "my-finetuned-bert".
{object}.push_to_hub("huggingface/my-finetuned-bert")