diff --git a/scripts/web_demo.py b/scripts/web_demo.py index d07d96d..96ae9f5 100644 --- a/scripts/web_demo.py +++ b/scripts/web_demo.py @@ -71,7 +71,7 @@ st.markdown(""" """, unsafe_allow_html=True) -device = "cuda" if torch.cuda.is_available() else "cpu" +device = "cuda" if torch.cuda.is_available() else ("mps" if torch.backends.mps.is_available() else "cpu") # 多语言文本 LANG_TEXTS = { diff --git a/trainer/train_agent.py b/trainer/train_agent.py index 4619dbb..cd1e860 100644 --- a/trainer/train_agent.py +++ b/trainer/train_agent.py @@ -414,9 +414,9 @@ if __name__ == "__main__": max_seq_len=args.max_seq_len + args.max_gen_len, use_moe=bool(args.use_moe)) ckp_data = lm_checkpoint(lm_config, weight=args.save_weight, save_dir='../checkpoints') if args.from_resume == 1 else None - device_type = "cuda" if "cuda" in args.device else "cpu" + device_type = "cuda" if "cuda" in args.device else ("mps" if "mps" in args.device else "cpu") dtype = torch.bfloat16 if args.dtype == "bfloat16" else torch.float16 - autocast_ctx = nullcontext() if device_type == "cpu" else torch.cuda.amp.autocast(dtype=dtype) + autocast_ctx = nullcontext() if device_type == "cpu" else torch.amp.autocast(device_type, dtype=dtype) wandb = None if args.use_wandb and is_main_process(): diff --git a/trainer/train_distillation.py b/trainer/train_distillation.py index dce5346..4254487 100644 --- a/trainer/train_distillation.py +++ b/trainer/train_distillation.py @@ -179,9 +179,9 @@ if __name__ == "__main__": ckp_data = lm_checkpoint(lm_config_student, weight=args.save_weight, save_dir='../checkpoints') if args.from_resume==1 else None # ========== 3. 设置混合精度 ========== - device_type = "cuda" if "cuda" in args.device else "cpu" + device_type = "cuda" if "cuda" in args.device else ("mps" if "mps" in args.device else "cpu") dtype = torch.bfloat16 if args.dtype == "bfloat16" else torch.float16 - autocast_ctx = nullcontext() if device_type == "cpu" else torch.cuda.amp.autocast(dtype=dtype) + autocast_ctx = nullcontext() if device_type == "cpu" else torch.amp.autocast(device_type, dtype=dtype) # ========== 4. 配wandb ========== wandb = None @@ -201,7 +201,7 @@ if __name__ == "__main__": Logger(f'教师模型总参数量:{sum(p.numel() for p in teacher_model.parameters()) / 1e6:.3f} M') train_ds = SFTDataset(args.data_path, tokenizer, max_length=args.max_seq_len) train_sampler = DistributedSampler(train_ds) if dist.is_initialized() else None - scaler = torch.cuda.amp.GradScaler(enabled=(args.dtype == 'float16')) + scaler = torch.amp.GradScaler(device_type, enabled=(args.dtype == 'float16' and device_type == 'cuda')) optimizer = optim.AdamW(model.parameters(), lr=args.learning_rate) # ========== 6. 从ckp恢复状态 ========== diff --git a/trainer/train_dpo.py b/trainer/train_dpo.py index 69fa773..5f0132e 100644 --- a/trainer/train_dpo.py +++ b/trainer/train_dpo.py @@ -157,9 +157,9 @@ if __name__ == "__main__": ckp_data = lm_checkpoint(lm_config, weight=args.save_weight, save_dir='../checkpoints') if args.from_resume==1 else None # ========== 3. 设置混合精度 ========== - device_type = "cuda" if "cuda" in args.device else "cpu" + device_type = "cuda" if "cuda" in args.device else ("mps" if "mps" in args.device else "cpu") dtype = torch.bfloat16 if args.dtype == "bfloat16" else torch.float16 - autocast_ctx = nullcontext() if device_type == "cpu" else torch.cuda.amp.autocast(dtype=dtype) + autocast_ctx = nullcontext() if device_type == "cpu" else torch.amp.autocast(device_type, dtype=dtype) # ========== 4. 配wandb ========== wandb = None @@ -181,7 +181,7 @@ if __name__ == "__main__": train_ds = DPODataset(args.data_path, tokenizer, max_length=args.max_seq_len) train_sampler = DistributedSampler(train_ds) if dist.is_initialized() else None - scaler = torch.cuda.amp.GradScaler(enabled=(args.dtype == 'float16')) + scaler = torch.amp.GradScaler(device_type, enabled=(args.dtype == 'float16' and device_type == 'cuda')) optimizer = optim.AdamW(model.parameters(), lr=args.learning_rate) # ========== 6. 从ckp恢复状态 ========== diff --git a/trainer/train_full_sft.py b/trainer/train_full_sft.py index 2610d1a..7e43a92 100644 --- a/trainer/train_full_sft.py +++ b/trainer/train_full_sft.py @@ -110,9 +110,9 @@ if __name__ == "__main__": ckp_data = lm_checkpoint(lm_config, weight=args.save_weight, save_dir='../checkpoints') if args.from_resume==1 else None # ========== 3. 设置混合精度 ========== - device_type = "cuda" if "cuda" in args.device else "cpu" + device_type = "cuda" if "cuda" in args.device else ("mps" if "mps" in args.device else "cpu") dtype = torch.bfloat16 if args.dtype == "bfloat16" else torch.float16 - autocast_ctx = nullcontext() if device_type == "cpu" else torch.cuda.amp.autocast(dtype=dtype) + autocast_ctx = nullcontext() if device_type == "cpu" else torch.amp.autocast(device_type, dtype=dtype) # ========== 4. 配wandb ========== wandb = None @@ -127,7 +127,7 @@ if __name__ == "__main__": model, tokenizer = init_model(lm_config, args.from_weight, device=args.device) train_ds = SFTDataset(args.data_path, tokenizer, max_length=args.max_seq_len) train_sampler = DistributedSampler(train_ds) if dist.is_initialized() else None - scaler = torch.cuda.amp.GradScaler(enabled=(args.dtype == 'float16')) + scaler = torch.amp.GradScaler(device_type, enabled=(args.dtype == 'float16' and device_type == 'cuda')) optimizer = optim.AdamW(model.parameters(), lr=args.learning_rate) # ========== 6. 从ckp恢复状态 ========== diff --git a/trainer/train_grpo.py b/trainer/train_grpo.py index 8a37dd6..030b223 100755 --- a/trainer/train_grpo.py +++ b/trainer/train_grpo.py @@ -248,9 +248,9 @@ if __name__ == "__main__": ckp_data = lm_checkpoint(lm_config, weight=args.save_weight, save_dir='../checkpoints') if args.from_resume==1 else None # ========== 3. 设置混合精度 ========== - device_type = "cuda" if "cuda" in args.device else "cpu" + device_type = "cuda" if "cuda" in args.device else ("mps" if "mps" in args.device else "cpu") dtype = torch.bfloat16 if args.dtype == "bfloat16" else torch.float16 - autocast_ctx = nullcontext() if device_type == "cpu" else torch.cuda.amp.autocast(dtype=dtype) + autocast_ctx = nullcontext() if device_type == "cpu" else torch.amp.autocast(device_type, dtype=dtype) # ========== 4. 配wandb ========== wandb = None diff --git a/trainer/train_lora.py b/trainer/train_lora.py index 4717292..2cd45ed 100644 --- a/trainer/train_lora.py +++ b/trainer/train_lora.py @@ -103,9 +103,9 @@ if __name__ == "__main__": ckp_data = lm_checkpoint(lm_config, weight=args.lora_name, save_dir='../checkpoints') if args.from_resume==1 else None # ========== 3. 设置混合精度 ========== - device_type = "cuda" if "cuda" in args.device else "cpu" + device_type = "cuda" if "cuda" in args.device else ("mps" if "mps" in args.device else "cpu") dtype = torch.bfloat16 if args.dtype == "bfloat16" else torch.float16 - autocast_ctx = nullcontext() if device_type == "cpu" else torch.cuda.amp.autocast(dtype=dtype) + autocast_ctx = nullcontext() if device_type == "cpu" else torch.amp.autocast(device_type, dtype=dtype) # ========== 4. 配wandb ========== wandb = None @@ -139,7 +139,7 @@ if __name__ == "__main__": # ========== 6. 定义数据和优化器 ========== train_ds = SFTDataset(args.data_path, tokenizer, max_length=args.max_seq_len) train_sampler = DistributedSampler(train_ds) if dist.is_initialized() else None - scaler = torch.cuda.amp.GradScaler(enabled=(args.dtype == 'float16')) + scaler = torch.amp.GradScaler(device_type, enabled=(args.dtype == 'float16' and device_type == 'cuda')) optimizer = optim.AdamW(lora_params, lr=args.learning_rate) # ========== 7. 从ckp恢复状态 ========== diff --git a/trainer/train_ppo.py b/trainer/train_ppo.py index 4290b63..3941c09 100644 --- a/trainer/train_ppo.py +++ b/trainer/train_ppo.py @@ -360,9 +360,9 @@ if __name__ == "__main__": ckp_data = lm_checkpoint(lm_config, weight=args.save_weight, save_dir='../checkpoints') if args.from_resume==1 else None # ========== 3. 设置混合精度 ========== - device_type = "cuda" if "cuda" in args.device else "cpu" + device_type = "cuda" if "cuda" in args.device else ("mps" if "mps" in args.device else "cpu") dtype = torch.bfloat16 if args.dtype == "bfloat16" else torch.float16 - autocast_ctx = nullcontext() if device_type == "cpu" else torch.cuda.amp.autocast(dtype=dtype) + autocast_ctx = nullcontext() if device_type == "cpu" else torch.amp.autocast(device_type, dtype=dtype) # ========== 4. 配wandb ========== wandb = None diff --git a/trainer/train_pretrain.py b/trainer/train_pretrain.py index a5d2fa2..72b99b5 100644 --- a/trainer/train_pretrain.py +++ b/trainer/train_pretrain.py @@ -109,9 +109,9 @@ if __name__ == "__main__": ckp_data = lm_checkpoint(lm_config, weight=args.save_weight, save_dir='../checkpoints') if args.from_resume==1 else None # ========== 3. 设置混合精度 ========== - device_type = "cuda" if "cuda" in args.device else "cpu" + device_type = "cuda" if "cuda" in args.device else ("mps" if "mps" in args.device else "cpu") dtype = torch.bfloat16 if args.dtype == "bfloat16" else torch.float16 - autocast_ctx = nullcontext() if device_type == "cpu" else torch.cuda.amp.autocast(dtype=dtype) + autocast_ctx = nullcontext() if device_type == "cpu" else torch.amp.autocast(device_type, dtype=dtype) # ========== 4. 配wandb ========== wandb = None @@ -126,7 +126,7 @@ if __name__ == "__main__": model, tokenizer = init_model(lm_config, args.from_weight, device=args.device) train_ds = PretrainDataset(args.data_path, tokenizer, max_length=args.max_seq_len) train_sampler = DistributedSampler(train_ds) if dist.is_initialized() else None - scaler = torch.cuda.amp.GradScaler(enabled=(args.dtype == 'float16')) + scaler = torch.amp.GradScaler(device_type, enabled=(args.dtype == 'float16' and device_type == 'cuda')) optimizer = optim.AdamW(model.parameters(), lr=args.learning_rate) # ========== 6. 从ckp恢复状态 ==========