Apply Zero-3 and LoRA appears empty lora weight [0]
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức phù hợp với người mới
- 38/100
- Loại issue
- Lỗi
- Độ rõ ràng
- Khá rõ ràng
- Mức độ hoạt động
- Đình trệ
- Lĩnh vực
- distributed-systems, machine-learning
Hướng nghiên cứu
Bắt đầu bằng cách chạy bản tái hiện Python được cung cấp với cấu hình DeepSpeed ZeRO-3 đã nêu, sau đó so sánh các shape của LoRA state-dict trước và sau accelerator.prepare. Truy vết đường dẫn chuẩn bị ZeRO-3 cho model được bọc bằng PEFT; hoàn thành khi các trọng số LoRA vẫn giữ các shape có thể sử dụng dưới ZeRO-3 và bản tái hiện hoặc một regression test bao quát hành vi này.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
System Info
accelerate 1.6.0
peft 0.15.0
transformers 4.51.3
deepspeed 0.16.5
Information
The official example scripts
My own modified scripts
Tasks
An officially supported task in the examples folder
My own task or dataset (give details below)
Reproduction
from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import LoraConfig, get_peft_model
from accelerate import Accelerator
import torch
from torch.utils.data import Dataset, DataLoader
class DummyDataset(Dataset):
def __init__(self, tokenizer, dummy_text="Hello, world!", num_samples=100):
self.tokenizer = tokenizer
self.dummy_text = dummy_text
self.num_samples = num_samples
def __len__(self):
return self.num_samples
def __getitem__(self, idx):
encoded = self.tokenizer(self.dummy_text, return_tensors="pt")
item = {key: val.squeeze(0) for key, val in encoded.items()}
return item
accelerator = Accelerator()
model_name = "/home/clouduser/jxk/Qwen2.5-1.5B-Instruct"
model = AutoModelForCausalLM.from_pretrained(model_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)
lora_config = LoraConfig(r=8, lora_alpha=32, lora_dropout=0.1, bias="none", task_type="CAUSAL_LM")
model = get_peft_model(model, lora_config)
optimizer = torch.optim.Adam(model.parameters(), lr=5e-5)
dummy_dataset = DummyDataset(tokenizer, dummy_text="Hello, world!", num_samples=100)
dataloader = DataLoader(dummy_dataset, batch_size=4, shuffle=True)
print("++++" * 100)
policy_state_dict = model.state_dict()
for key, value in policy_state_dict.items():
if "lora_A" in key or "lora_B" in key:
print(f"{key}: {value.shape}")
print("++++" * 100)
print("====" * 100)
print("====" * 100)
print("====" * 100)
print("====" * 100)
model, optimizer, dataloader = accelerator.prepare(model, optimizer, dataloader)
print("++++" * 100)
policy_state_dict = model.state_dict()
for key, value in policy_state_dict.items():
if "lora_A" in key or "lora_B" in key:
print(f"{key}: {value.shape}")
print("++++" * 100)
The printed results (lora weight) are:
Before using zero 3:
base_model.model.model.layers.20.self_attn.q_proj.lora_A.default.weight: torch.Size([8, 1536]) base_model.model.model.layers.20.self_attn.q_proj.lora_B.default.weight: torch.Size([1536, 8]) base_model.model.model.layers.20.self_attn.v_proj.lora_A.default.weight: torch.Size([8, 1536]) base_model.model.model.layers.20.self_attn.v_proj.lora_B.default.weight: torch.Size([256, 8]) base_model.model.model.layers.21.self_attn.q_proj.lora_A.default.weight: torch.Size([8, 1536]) base_model.model.model.layers.21.self_attn.q_proj.lora_B.default.weight: torch.Size([1536, 8]) base_model.model.model.layers.21.self_attn.v_proj.lora_A.default.weight: torch.Size([8, 1536])
After using zero 3:
module.base_model.model.model.layers.21.self_attn.q_proj.lora_A.default.weight: torch.Size([0]) module.base_model.model.model.layers.21.self_attn.q_proj.lora_B.default.weight: torch.Size([0]) module.base_model.model.model.layers.21.self_attn.v_proj.lora_A.default.weight: torch.Size([0]) module.base_model.model.model.layers.21.self_attn.v_proj.lora_B.default.weight: torch.Size([0]) module.base_model.model.model.layers.22.self_attn.q_proj.lora_A.default.weight: torch.Size([0]) module.base_model.model.model.layers.22.self_attn.q_proj.lora_B.default.weight: torch.Size([0]) module.base_model.model.model.layers.22.self_attn.v_proj.lora_A.default.weight: torch.Size([0]) module.base_model.model.model.layers.22.self_attn.v_proj.lora_B.default.weight: torch.Size([0]) module.base_model.model.model.layers.23.self_attn.q_proj.lora_A.default.weight: torch.Size([0])
This is my zero-stage config file:
compute_environment: LOCAL_MACHINE
debug: false
deepspeed_config:
deepspeed_multinode_launcher: standard
offload_optimizer_device: none
offload_param_device: none
zero3_init_flag: true
zero3_save_16bit_model: true
zero_stage: 3
distributed_type: DEEPSPEED
downcast_bf16: 'no'
machine_rank: 0
main_training_function: main
mixed_precision: bf16
num_machines: 1
num_processes: 1
rdzv_backend: static
same_network: true
tpu_env: []
tpu_use_cluster: false
tpu_use_sudo: false
use_cpu: false
My model is :
name: "Qwen/Qwen/Qwen1.5-0.5B-Chat"
# name: "Qwen/Qwen2.5-7B-Instruct"
# name: "Qwen/Qwen2.5-32B-Instruct"
# name: "Qwen/Qwen2.5-14B-Instruct"
# name: "internlm/internlm2_5-1_8b"
# name: "meta-llama/Llama-3.1-8B-Instruct"
This is my lora config:
lora_config:
r: 8
lora_alpha: 32
target_modules:
- "q_proj" # qwen
- "v_proj" # qwen
lora_dropout: 0.1
bias: "none"
task_type: "CAUSAL_LM"
Expected behavior
After using Deepspeed's lora+zero3, I found that the weight of lora changed to [0]; If I use zero2 without encountering such problems, can you help me?
- Ngôn ngữ chính
- Python
- Star
- 6.8k
- Fork
- 1.1k
- Merge trung bình
- 3 ngày 20 giờ
- Pull request đã merge (30 ngày)
- 5
Chuẩn bị môi trường
Dự án này không cung cấp dev container, Dockerfile hay hướng dẫn đóng góp, nên bạn cần tự thiết lập môi trường: hãy bắt đầu từ README và xem hướng dẫn đóng góp lần đầu của chúng tôi để biết các bước chung.
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của deepspeedai/DeepSpeedExamples
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 52/100
deepspeedai/DeepSpeedExamples#996 ·
-
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 25/100
deepspeedai/DeepSpeedExamples#995 ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 52/100
deepspeedai/DeepSpeedExamples#989 ·
-
moe example 404Đang mở
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 25/100
deepspeedai/DeepSpeedExamples#984 ·
-
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 42/100
deepspeedai/DeepSpeedExamples#979 · 6 bình luận ·
Tất cả issue của deepspeedai/DeepSpeedExamples
Issue tương tự
-
Độ khó 1/5 1-3 giờ Mức phù hợp với người mới 88/100
gradio-app/gradio#13964 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 93/100
BSData/horus-heresy-3rd-edition#3232 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
jbacalso24/mimry#123 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
p:3-mid pydanty:bug pydanty:is-working
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
pydantic/pydantic-ai#10153 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
good first issue priority: medium size: S testing
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 85/100
cubrid-lab/cubrid-cookbook-python#316 ·
Maintainer thường phản hồi trong vòng 1 ngày