黎夕旧梦696 2025-12-01 09:43 采纳率: 20%
浏览 3

llama factory

为什么用llama factory训练会出现这种情况?


Traceback (most recent call last):
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\shutil.py", line 805, in move
    os.rename(src, real_dst)
FileExistsError: [WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\Administrator\\.cache\\huggingface\\datasets\\json\\default-bf3f9b144b5cfe49\\0.0.0\\f4e89e8750d5d5ffbef2c078bf0ddfedef29dc2faff52a6255cf513c05eb1092\\tmp11s7iwpm' -> 'C:\\Users\\Administrator\\.cache\\huggingface\\datasets\\json\\default-bf3f9b144b5cfe49\\0.0.0\\f4e89e8750d5d5ffbef2c078bf0ddfedef29dc2faff52a6255cf513c05eb1092\\cache-96a325d49cb3cef9.arrow'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\runpy.py", line 196, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\runpy.py", line 86, in _run_code
    exec(code, run_globals)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\Scripts\llamafactory-cli.exe\__main__.py", line 6, in <module>
  File "C:\Users\Administrator\Documents\LLaMA-Factory-main\src\llamafactory\cli.py", line 24, in main
    launcher.launch()
  File "C:\Users\Administrator\Documents\LLaMA-Factory-main\src\llamafactory\launcher.py", line 157, in launch
    run_exp()
  File "C:\Users\Administrator\Documents\LLaMA-Factory-main\src\llamafactory\train\tuner.py", line 132, in run_exp
    _training_function(config={"args": args, "callbacks": callbacks})
  File "C:\Users\Administrator\Documents\LLaMA-Factory-main\src\llamafactory\train\tuner.py", line 93, in _training_function
    run_sft(model_args, data_args, training_args, finetuning_args, generating_args, callbacks)
  File "C:\Users\Administrator\Documents\LLaMA-Factory-main\src\llamafactory\train\sft\workflow.py", line 51, in run_sft
    dataset_module = get_dataset(template, model_args, data_args, training_args, stage="sft", **tokenizer_module)
  File "C:\Users\Administrator\Documents\LLaMA-Factory-main\src\llamafactory\data\loader.py", line 327, in get_dataset
    dataset_dict = split_dataset(dataset, eval_dataset, data_args, seed=training_args.seed)
  File "C:\Users\Administrator\Documents\LLaMA-Factory-main\src\llamafactory\data\data_utils.py", line 104, in split_dataset
    dataset = dataset.train_test_split(test_size=val_size, seed=seed)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\site-packages\datasets\arrow_dataset.py", line 560, in wrapper
    out: Union["Dataset", "DatasetDict"] = func(self, *args, **kwargs)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\site-packages\datasets\fingerprint.py", line 442, in wrapper
    out = func(dataset, *args, **kwargs)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\site-packages\datasets\arrow_dataset.py", line 4871, in train_test_split
    train_split = self.select(
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\site-packages\datasets\arrow_dataset.py", line 560, in wrapper
    out: Union["Dataset", "DatasetDict"] = func(self, *args, **kwargs)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\site-packages\datasets\fingerprint.py", line 442, in wrapper
    out = func(dataset, *args, **kwargs)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\site-packages\datasets\arrow_dataset.py", line 4089, in select
    return self._select_with_indices_mapping(
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\site-packages\datasets\arrow_dataset.py", line 560, in wrapper
    out: Union["Dataset", "DatasetDict"] = func(self, *args, **kwargs)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\site-packages\datasets\fingerprint.py", line 442, in wrapper
    out = func(dataset, *args, **kwargs)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\site-packages\datasets\arrow_dataset.py", line 4247, in _select_with_indices_mapping
    shutil.move(tmp_file.name, indices_cache_file_name)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\shutil.py", line 825, in move
    copy_function(src, real_dst)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\shutil.py", line 434, in copy2
    copyfile(src, dst, follow_symlinks=follow_symlinks)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\shutil.py", line 256, in copyfile
    with open(dst, 'wb') as fdst:
OSError: [Errno 22] Invalid argument: 'C:\\Users\\Administrator\\.cache\\huggingface\\datasets\\json\\default-bf3f9b144b5cfe49\\0.0.0\\f4e89e8750d5d5ffbef2c078bf0ddfedef29dc2faff52a6255cf513c05eb1092\\cache-96a325d49cb3cef9.arrow'
  • 写回答

2条回答 默认 最新

  • 檀越@新空间 2025-12-01 09:48
    关注

    上午好☀️☀️☀️️
    本答案参考通义千问

    你遇到的错误信息是:

    FileExistsError: [WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\...\\tmp11s7iwpm' -> 'C:\\...\\cache-96a325d49cb3cef9.arrow'
    

    这个错误通常发生在 文件系统操作中尝试覆盖一个已经存在的文件,而系统不允许直接覆盖,尤其是当使用 shutil.move() 或其他类似函数时。


    一、问题原因分析

    1. Hugging Face Datasets 缓存冲突

    • 你在使用 LLaMA Factory 进行训练时,可能加载了 Hugging Face 的数据集(如 JSON 文件)。
    • Hugging Face datasets 在处理数据时会自动缓存数据到本地路径:C:\Users\...\\.cache\huggingface\datasets\json\...
    • 如果之前运行过相同的训练任务,缓存文件可能已经存在,而当前操作试图再次创建相同名称的文件,导致冲突。

    2. 文件名重复或缓存未清理

    • 每次运行训练脚本时,Hugging Face 会生成唯一的目录结构(如 default-bf3f9b144b5cfe49),但内部的文件名(如 cache-96a325d49cb3cef9.arrow)可能会重复。
    • Windows 系统不允许直接覆盖已有文件,因此在移动文件时抛出 FileExistsError

    二、解决方案

    1. 清理 Hugging Face 缓存

    这是最直接有效的解决办法。

    步骤如下:

    1. 打开命令提示符(CMD)或 PowerShell。

    2. 输入以下命令删除 Hugging Face 缓存:

      rm -rf ~/.cache/huggingface/datasets
      

      注意:如果你使用的是 Windows,路径可能是:

      del /q /s %USERPROFILE%\.cache\huggingface\datasets\*
      rmdir /s /q %USERPROFILE%\.cache\huggingface\datasets
      
    3. 重新运行你的训练脚本,此时会重新下载并缓存数据。


    2. 修改 Hugging Face 缓存路径(可选)

    如果你不想每次都清理缓存,可以修改 Hugging Face 的缓存路径,避免与其他任务冲突。

    代码示例:

    import os
    os.environ["HF_DATASETS_CACHE"] = "your_custom_cache_path"
    

    your_custom_cache_path 替换为一个你指定的目录,例如:

    os.environ["HF_DATASETS_CACHE"] = "C:/custom_cache/hf_datasets"
    

    3. 使用 force_download=True 参数(适用于 dataset 加载)

    如果你是从远程加载数据集,可以在加载时强制重新下载,而不是使用缓存。

    示例代码:

    from datasets import load_dataset
    
    dataset = load_dataset("json", data_files="path/to/your/data.json", cache_dir="your_custom_cache_path", force_download=True)
    

    4. 修改 LLaMA Factory 配置(高级)

    如果上述方法无效,你可以尝试修改 LLaMA Factory 的配置文件,禁用缓存或者调整缓存行为。

    修改 config.yaml 或相关配置文件:

    data:
      use_cache: false
    

    具体位置取决于你使用的版本和配置方式,建议查看官方文档或源码中的配置说明。


    三、总结

    | 解决方案 | 说明 | |----------|------| | ✅ 清理 Hugging Face 缓存 | 直接删除 .cache/huggingface/datasets 目录 | | ✅ 修改缓存路径 | 使用环境变量设置自定义缓存目录 | | ✅ 强制下载数据集 | 在加载数据时添加 force_download=True | | ✅ 修改配置文件 | 禁用缓存或调整缓存行为 |


    四、参考代码(修改缓存路径)

    import os
    os.environ["HF_DATASETS_CACHE"] = "C:/custom_cache/hf_datasets"
    
    # 然后继续你的训练流程
    

    如果你能提供完整的训练脚本或配置文件,我可以进一步帮你定位问题根源。希望这些信息对你有帮助!

    评论

报告相同问题?

问题事件

  • 创建了问题 12月1日