PEFT documentation
RoAd
RoAd
RoAd là một kỹ thuật tinh chỉnh hiệu quả tham số, giúp thích ứng các mô hình ngôn ngữ lớn bằng cách học một tập hợp nhỏ các ma trận xoay 2×2 (và các hệ số tỷ lệ tùy chọn) được áp dụng cho các cặp chiều ẩn. RoAd đạt hiệu suất cạnh tranh hoặc vượt trội so với các phương pháp PEFT khác với dưới 0,1% tham số có thể huấn luyện. Khác với các cập nhật hạng thấp theo lô của LoRA, các phép xoay thưa của RoAd được biến đổi thành các phép toán đơn giản theo từng phần tử, mang lại thông lượng phục vụ cao hơn đáng kể khi xử lý các yêu cầu không đồng nhất trong cùng một lô, tức là phục vụ đồng thời nhiều adapter. Hơn nữa, RoAd tích hợp liền mạch vào một khung can thiệp trao đổi phân tán, diễn giải các phép xoay 2D thưa của nó như các can thiệp đặc thù cho tác vụ trong các không gian con đã học của các biểu diễn ẩn. Các không gian con trực giao này có thể được kết hợp để gộp nhiều hành vi đặc thù cho tác vụ—như khả năng đa ngôn ngữ hoặc tuân theo chỉ dẫn—mà không cần tinh chỉnh thêm, cho phép các thích ứng có tính mô-đun và có thể diễn giải trong các LLM.
Việc tinh chỉnh với RoAd thường yêu cầu tốc độ học cao hơn so với LoRA hoặc các phương pháp tương tự, khoảng 1e-3. Hiện tại, RoAd chỉ hỗ trợ các lớp tuyến tính và có thể được sử dụng trên các mô hình đã được lượng tử hóa bằng bitsandbytes (4-bit hoặc 8-bit).
Để chạy suy luận với các adapter RoAd khác nhau trong cùng một batch, xem Suy luận với các adapter LoRA khác nhau trong cùng một batch.
Tổng quan về benchmark
API
RoadConfig
lớp peft.RoadConfig
< source >( 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 = Falsevariant: Union[str, RoadVariant] = 'road_1'group_size: int = 64init_weights: bool = Truetarget_modules: Optional[Union[list[str], str]] = Nonemodules_to_save: Optional[list[str]] = None )
Tham số
- variant (Union[
RoadVariant,str]) — Biến thể của mô hình Road cần sử dụng. Nó có thể là road_1, road_2 hoặc road_4. Tham khảo bài báo để biết thêm chi tiết.- road_1: Sử dụng cùng một tỷ lệ và góc cho tất cả các cặp phần tử. Biến thể này có số lượng tham số thấp nhất, nó lưu trữ một số lượng tham số bằng kích thước ẩn đầu ra cho mỗi lớp mà RoAd được áp dụng.
- road_2: Sử dụng cùng một tỷ lệ và góc cho mỗi phần tử. Biến thể này có số lượng tham số gấp đôi so với road_1.
- road_4: Sử dụng hai thang đo và góc khác nhau cho mỗi phần tử. Biến thể này có số lượng tham số gấp 4 lần so với road_1.
- group_size (
int) — Group size xác định cách các phần tử được nhóm lại thành các vector 2 chiều để xoay. Trong mỗi nhóm, phần tử 0 được ghép với phần tử group_size/2, sau đó phần tử 1 được ghép với phần tử group_size/2+1 và cứ vậy tiếp tục. Điều này không ảnh hưởng đến hiệu suất của mô hình, vì các phần tử không có thứ tự, tuy nhiên nó có một số ảnh hưởng đến tốc độ suy luận khi được sử dụng trong ví dụ VLLM. Để đạt tốc độ tốt nhất, khuyến nghị group size ít nhất là 32 hoặc 64 (mặc định). Lưu ý rằng hidden size của mô hình (hoặc hidden size trên mỗi partition khi sử dụng tensor parallelism) phải chia hết cho group_size, do đó với các mô hình rất nhỏ, bạn có thể cần giảm tham số này. - init_weights (
bool) — Có thực hiện khởi tạo trọng số RoAd hay không. - target_modules (
Optional[Union[List[str], str]]) — Tên của các module cần áp dụng adapter. Nếu được chỉ định, chỉ các module có tên được chỉ định sẽ được thay thế. Khi truyền một chuỗi, một phép khớp regex sẽ được thực hiện. Khi truyền một danh sách các chuỗi, một phép khớp chính xác sẽ được thực hiện hoặc kiểm tra xem tên của module có kết thúc bằng bất kỳ chuỗi nào được truyền hay không. Nếu được chỉ định là ‘all-linear’, thì tất cả các module linear/Conv1D sẽ được chọn (nếu model là một PreTrainedModel, lớp output sẽ bị loại trừ). Nếu không được chỉ định, các module sẽ được chọn theo kiến trúc của model. Nếu kiến trúc không được biết đến, một lỗi sẽ được ném ra — trong trường hợp này, bạn nên chỉ định các module đích một cách thủ công. - modules_to_save (
List[str]) — Danh sách các module ngoài các lớp Road cần được đặt là có thể huấn luyện và lưu trong checkpoint cuối cùng.
Đây là lớp cấu hình để lưu trữ cấu hình của RoadModel. Bộ thích ứng RoAd được đề xuất trong https://huggingface.co/papers/2409.00119.
RoadModel
lớp peft.RoadModel
< source >( modelpeft_config: Union[PeftConfig, dict[str, PeftConfig]]adapter_name: strlow_cpu_mem_usage: bool = Falsestate_dict: Optional[dict[str, torch.Tensor]] = None )