Traceback (most recent call last): File "/home/ubuntu/miniconda3/envs/llama/bin/llamafactory-cli", line 8, in <module> sys.exit(main()) ^^^^^^ File "/home/ubuntu/LLaMA-Factory/src/llamafactory/cli.py", line 130, in main process = subprocess.run( ^^^^^^^^^^^^^^^ File "/home/ubuntu/miniconda3/envs/llama/lib/python3.11/subprocess.py", line 571, in run raise CalledProcessError(retcode, process.args, subprocess.CalledProcessError: Command '['torchrun', '--nnodes', '1', '--node_rank', '0', '--nproc_per_node', '4', '--master_addr', '127.0.0.1', '--master_port', '51531', '/home/ubuntu/LLaMA-Factory/src/llamafactory/launcher.py', 'examples/train_qlora/qwen_lora_sft_bitsandbytes.yaml']' returned non-zero exit status 1. 解决方法?
时间: 2025-07-20 13:29:26 浏览: 14
<think>我们正在解决使用LLaMA-Factory进行训练时出现的torchrun子进程错误(错误提示:llamafactory-cli torchrun subprocess error exit status 1)。这个错误通常与分布式训练环境配置、资源不足或代码问题有关。以下将分步骤解决:
### 步骤1: 确认环境配置
首先检查CUDA、PyTorch和LLaMA-Factory的版本兼容性:
```bash
# 检查CUDA版本
nvcc --version
# 检查PyTorch版本
python -c "import torch; print(torch.__version__)"
```
确保:
- PyTorch版本与CUDA版本匹配(例如PyTorch 2.0+需要CUDA 11.8+)
- LLaMA-Factory为最新版(可运行`pip install -U llama-factory`升级)
### 步骤2: 检查资源占用
错误可能由GPU内存不足引起。在运行训练前监控资源:
```bash
# 查看GPU使用情况
nvidia-smi
# 减少batch_size或使用梯度累积
# 在LLaMA-Factory的配置中设置:
# per_device_train_batch_size=4
# gradient_accumulation_steps=8
```
### 步骤3: 调试分布式启动命令
使用`torchrun`启动分布式训练时,错误可能源于参数配置。尝试简化命令:
```bash
# 原始命令示例(可能因配置复杂而出错)
torchrun --nproc_per_node=4 --master_port=20001 train_bash.py ...
# 改为单卡调试模式(排除分布式问题)
CUDA_VISIBLE_DEVICES=0 python train_bash.py \
--stage sft \
--model_name_or_path path/to/llama-7b \
--do_train \
--dataset alpaca_gpt4_en \
--output_dir output \
--overwrite_cache \
--per_device_train_batch_size 4 \
--gradient_accumulation_steps 8 \
--lr_scheduler_type cosine \
--logging_steps 10 \
--save_steps 1000 \
--learning_rate 5e-5 \
--num_train_epochs 3.0 \
--fp16
```
### 步骤4: 查看详细错误日志
启用LLaMA-Factory的详细日志输出,定位具体错误位置:
```python
# 在train_bash.py中添加
import logging
logging.basicConfig(level=logging.DEBUG)
```
或通过命令行捕获错误:
```bash
# 将标准错误输出重定向到文件
torchrun ... 2> error.log
```
### 步骤5: 常见错误解决方案
根据日志中出现的具体错误类型处理:
| 错误类型 | 解决方案 |
|---------------------------|--------------------------------------------------------------------------|
| CUDA out of memory | 减少`per_device_train_batch_size`,增加`gradient_accumulation_steps` |
| NCCL timeout | 添加环境变量`export NCCL_IB_TIMEOUT=1000` |
| 端口冲突 | 更换`--master_port`值(如20001→20002) |
| 不兼容的tokenizer | 检查`model_name_or_path`是否包含正确的tokenizer配置 |
### 完整调试流程
```mermaid
graph TD
A[启动训练] --> B{是否出现错误?}
B -->|是| C[查看错误日志]
C --> D[识别错误类型]
D --> E[应用对应解决方案]
E --> A
B -->|否| F[正常训练]
```
### 验证修复
成功运行后,使用最小数据集验证:
```bash
torchrun --nproc_per_node=1 train_bash.py \
--stage sft \
--model_name_or_path path/to/llama-7b \
--dataset alpaca_gpt4_en \
--output_dir output \
--per_device_train_batch_size 1 \
--max_samples 10 # 仅用10条数据测试
```
§§相关问题§§
1. 如何调整LLaMA-Factory的超参数以提升训练效率?
2. LLaMA-Factory支持哪些分布式训练策略?
3. 训练过程中如何监控GPU显存使用情况?</think>### 解决 LLaMA-Factory 训练中的 torchrun 子进程错误 (exit status 1)
当在 LLaMA-Factory 训练中出现 `llamafactory-cli torchrun subprocess error exit status 1` 错误时,通常由以下原因引起,以下是系统性的解决方案:
---
#### 1. **分布式训练配置错误** [^1][^3]
这是最常见的问题,需检查:
```bash
# 确认 master 地址和端口可用性
nc -zv localhost 29500 # 测试默认端口
# 正确启动命令示例(单机多卡)
torchrun \
--nproc_per_node=2 \ # 每台机器使用的GPU数
--nnodes=1 \ # 总机器数
--master_addr=127.0.0.1 \ # 主节点IP
--master_port=29501 \ # 避免冲突的端口
train_bash.py \
--stage sft \ # 训练阶段
--model_name_or_path meta-llama/Llama-2-7b-hf \
--dataset alpaca_en \
--output_dir ./output
```
> **关键参数**:
> - `--nproc_per_node` 必须 ≤ 实际GPU数量
> - `--master_port` 需确保未被占用(更换为 29502/29503 等)
> - 多机训练时需配置相同的 `--master_addr`
---
#### 2. **GPU 资源不足** [^2]
错误可能由显存溢出导致:
```bash
# 监控显存使用
nvidia-smi -l 1 # 每秒刷新
# 解决方案:
export CUDA_VISIBLE_DEVICES=0,1 # 限制使用特定GPU
降低 batch_size(在 train_bash.py 中添加 --per_device_train_batch_size 8)
启用梯度累积:--gradient_accumulation_steps 4
```
> **优化建议**:
> ```python
> # 在 train_bash.py 中添加
> training_args = TrainingArguments(
> per_device_train_batch_size=4, # 减小batch
> gradient_accumulation_steps=8, # 累积梯度
> fp16=True, # 混合精度训练
> deepspeed="ds_config.json" # 启用DeepSpeed
> )
> ```
---
#### 3. **依赖版本冲突** [^1]
检查关键库版本兼容性:
```bash
# 验证版本匹配
pip list | grep -E "torch|transformers|accelerate"
# 应满足:
# torch==2.1.0+cu118
# transformers==4.36.2
# accelerate==0.25.0
```
**解决方案**:
```bash
# 创建纯净环境
conda create -n llama-factory python=3.10
pip install torch==2.1.0+cu118 -f https://download.pytorch.org/whl/torch_stable.html
pip install git+https://github.com/hiyouga/LLaMA-Factory.git
```
---
#### 4. **数据集加载错误** [^2]
当 `stage="pt"` 预训练数据加载失败时:
```python
# 在 llamafactory/train/pt/workflow.py 中调试
tokenizer = load_tokenizer(model_args)
print("Tokenizer loaded successfully") # 添加检查点
dataset = get_dataset(tokenizer, model_args, data_args, training_args, stage="pt")
print(f"Dataset loaded: {len(dataset)} samples") # 验证数据
```
**数据问题修复**:
1. 确保数据集路径正确
2. 检查数据格式是否符合要求
3. 添加 `--dataset_dir ./custom_data` 参数
---
#### 5. **系统级调试**
若仍无法解决,启用详细日志:
```bash
# 捕获详细错误信息
NCCL_DEBUG=INFO \
TORCH_DISTRIBUTED_DEBUG=DETAIL \
torchrun ... 2> error.log
```
**错误日志分析重点**:
- `CUDA out of memory` → 减小 batch size
- `Connection refused` → 检查端口/IP
- `NCCL error` → 更新 NCCL 库
---
### 完整解决流程
```mermaid
graph TD
A[出现错误] --> B{检查日志}
B -->|资源不足| C[减小batch size/用DeepSpeed]
B -->|端口冲突| D[更换master_port]
B -->|依赖冲突| E[创建纯净环境]
B -->|数据加载失败| F[验证数据集]
C --> G[重新训练]
D --> G
E --> G
F --> G
G --> H[训练成功]
```
阅读全文
相关推荐



















