PEFT documentation

Token có thể huấn luyện

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.21.0).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Token có thể huấn luyện

Phương pháp Trainable Tokens cung cấp một cách để nhắm mục tiêu vào các token embedding cụ thể để tinh chỉnh mà không cần huấn luyện toàn bộ ma trận embedding hoặc sử dụng adapter trên ma trận embedding. Phương pháp này dựa trên bản triển khai ban đầu từ đây.

Phương pháp này chỉ nhắm vào các token cụ thể và huấn luyện có chọn lọc các chỉ số token mà bạn chỉ định. Do đó, bộ nhớ RAM cần thiết sẽ thấp hơn và bộ nhớ đĩa cũng thấp hơn đáng kể so với việc lưu trữ ma trận nhúng được tinh chỉnh hoàn chỉnh.

Một số benchmark sơ bộ thu được bằng script này cho thấy rằng với gemma-2-2b (có ma trận embedding khá lớn), bạn có thể tiết kiệm ~4 GiB VRAM khi dùng Trainable Tokens so với việc fine-tune toàn bộ ma trận embedding. Trong khi LoRA sẽ sử dụng lượng VRAM tương đương, nó cũng có thể nhắm đến các token mà bạn không muốn thay đổi. Lưu ý rằng đây chỉ là những chỉ báo và kích thước ma trận embedding khác nhau có thể làm lệch các con số này một chút.

Lưu ý rằng phương pháp này không thêm token cho bạn, bạn phải tự thêm token vào tokenizer và điều chỉnh kích thước ma trận embedding của mô hình cho phù hợp. Phương pháp này chỉ huấn luyện lại embedding cho các token mà bạn chỉ định. Phương pháp này cũng có thể được sử dụng kết hợp với các lớp LoRA! Xem tài liệu về LoRA.

Việc lưu mô hình bằng save_pretrained() hoặc lấy state dict bằng get_peft_model_state_dict() khi thêm token mới có thể lưu toàn bộ ma trận embedding thay vì chỉ lưu phần chênh lệch, như một biện pháp phòng ngừa vì ma trận embedding đã được thay đổi kích thước. Để tiết kiệm dung lượng, bạn có thể tắt hành vi này bằng cách đặt save_embedding_layers=False khi gọi save_pretrained. Việc này an toàn miễn là bạn không thay đổi ma trận embedding bằng các phương tiện khác, vì những thay đổi như vậy sẽ không được theo dõi bởi các token có thể huấn luyện.

Tổng quan về benchmark

API

TrainableTokensConfig

lớp peft.TrainableTokensConfig

< >

( task_type: Optional[Union[str, TaskType]] = Nonepeft_type: Optional[Union[str, PeftType]] = Noneauto_mapping: Optional[dict] = Nonepeft_version: Optional[str] = Nonebase_model_name_or_path: Optional[str] = Nonerevision: Optional[str] = Noneinference_mode: bool = Falsetoken_indices: list[int] = <factory>target_modules: Optional[Union[list[str], str]] = Noneinit_weights: bool = True )

Tham số

  • token_indices (list[int]) — Danh sách các số nguyên, chỉ định các chỉ mục của các token mà bạn muốn có thể huấn luyện được. Để tìm chỉ mục của một token bằng tokenizer, bạn có thể tokenize chuỗi và xem input_ids được trả về. Càng gần số lượng chỉ mục bằng tổng số token, phương pháp này càng kém hiệu quả.
  • target_modules (Optional[Union[list[str], str]]) — Danh sách tên module hoặc biểu thức regex của các tên module cần thay thế bằng TrainableTokensLayer của chúng ta. Nếu không được định nghĩa, hệ thống sẽ cố gắng lấy lớp nhúng đầu vào của mô hình nếu mô hình có phương thức get_input_embeddings (các mô hình transformer thường có), nếu thất bại thì mặc định là ‘embed_tokens’. Các mục tiêu ví dụ khác là embedding, encoder.embeddings hoặc decoder.embeddings.
  • init_weights (bool) — Mặc định, trọng số của token mới được khởi tạo giống với embedding của token tương ứng. Điều này khiến TrainableTokens không có tác dụng khi không được huấn luyện. Nếu đặt thành False, trọng số sẽ là các giá trị ngẫu nhiên. Không nên thay đổi cài đặt này trừ khi bạn biết chính xác mình đang làm gì.

Cấu hình cho phương thức TrainableTokens.

Cho phép huấn luyện các token mới (và huấn luyện lại các token hiện có) mà không cần huấn luyện toàn bộ ma trận nhúng. Bằng cách đánh dấu một vài token được chọn (xác định bằng chỉ số của chúng) là có thể huấn luyện được và giữ nguyên các token còn lại, phương pháp này có thể được sử dụng để thêm token mới hoặc thay đổi nhúng của các token hiện có trong khi tiết kiệm bộ nhớ. Cả dung lượng lưu trữ lẫn bộ nhớ làm việc đều được giảm so với việc huấn luyện toàn bộ ma trận nhúng.

Lưu ý rằng việc huấn luyện với FSDP/DeepSpeed có thể chưa được hỗ trợ đầy đủ.

TrainableTokensModel

lớp peft.TrainableTokensModel

< >

( modelpeft_config: Union[PeftConfig, dict[str, PeftConfig]]adapter_name: strlow_cpu_mem_usage: bool = Falsestate_dict: Optional[dict[str, torch.Tensor]] = None )

Update on GitHub