执行AI大模型程序时,报错: Process finished with exit code -1073741819 (0xC0000005)
一.错误信息
代码部分如下:
from datasets import load_dataset
if __name__ == '__main__':
pc = ProjectConfig()
# load_dataset加载对应文件类型数据
train_dataset = load_dataset('text', data_files=pc.train_path)
print(f'train_dataset-->{train_dataset}')
print('*'*80)
print(train_dataset['train'])
print('*'*80)
print(train_dataset['train']['text'])
执行上面代码后,报错:
Windows fatal exception: access violation
Current thread 0x00013f7c (most recent call first):
File "<frozen importlib._bootstrap>", line 488 in _call_with_frames_removed
File "<frozen importlib._bootstrap_external>", line 1297 in exec_module
File "<frozen importlib._bootstrap>", line 935 in _load_unlocked
File "<frozen importlib._bootstrap>", line 1331 in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 1360 in _find_and_load
File "D:\ProgramData\anaconda3\envs\my_conda\Lib\site-packages\pyarrow\dataset.py", line 24 in <module>
File "<frozen importlib._bootstrap>", line 488 in _call_with_frames_removed
File "<frozen importlib._bootstrap_external>", line 995 in exec_module
File "<frozen importlib._bootstrap>", line 935 in _load_unlocked
File "<frozen importlib._bootstrap>", line 1331 in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 1360 in _find_and_load
File "D:\ProgramData\anaconda3\envs\my_conda\Lib\site-packages\datasets\arrow_dataset.py", line 61 in <module>
File "<frozen importlib._bootstrap>", line 488 in _call_with_frames_removed
File "<frozen importlib._bootstrap_external>", line 995 in exec_module
File "<frozen importlib._bootstrap>", line 935 in _load_unlocked
File "<frozen importlib._bootstrap>", line 1331 in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 1360 in _find_and_load
File "D:\ProgramData\anaconda3\envs\my_conda\Lib\site-packages\datasets\__init__.py", line 17 in <module>
File "<frozen importlib._bootstrap>", line 488 in _call_with_frames_removed
File "<frozen importlib._bootstrap_external>", line 995 in exec_module
File "<frozen importlib._bootstrap>", line 935 in _load_unlocked
File "<frozen importlib._bootstrap>", line 1331 in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 1360 in _find_and_load
File "F:\www\py-data\LLM\PET\data_handle\data_preprocess.py", line 6 in <module>
Process finished with exit code -1073741819 (0xC0000005)
二.错误原因
在 Python 中,
Process finished with exit code -1073741819 (0xC0000005)是一个 Windows 系统级别的访问冲突(Access Violation)错误。这通常意味着程序触发了内存越界、底层 C/C++ 扩展崩溃或核心组件版本不兼容,导致进程被操作系统强制终止,且没有留下常规的 Python 错误堆栈信息。结合正在使用
datasets库加载数据的场景,以下是导致该问题的几个常见原因及相应的排查
三.解决步骤
1. 文件路径或格式问题
datasets.load_dataset在处理本地文件时,如果路径解析出错、文件不存在或文件内部格式(如编码)异常,底层可能会发生崩溃。
- 检查路径:请确认
pc.train_path指向的是一个具体的文本文件(如train.txt)而不是一个文件夹。如果指向文件夹,需要使用data_files={'train': 'path/to/folder/*.txt'}的格式。 - 使用绝对路径:尝试将
pc.train_path替换为绝对路径,避免相对路径解析错误。 - 检查文件内容:确认该文本文件不为空,且编码格式为 UTF-8。你可以尝试用记事本或代码简单读取一下该文件,确认其能正常打开。
2. 库版本不兼容(最常见原因)
底层 C++ 扩展(如
pyarrow、fsspec)与 Python 或datasets库版本不匹配,极易引发内存级别的崩溃。
- 升级核心库:尝试在命令行中升级
datasets及其依赖库:pip install --upgrade datasets pyarrow fsspec - 清理缓存:
datasets库会将处理后的数据缓存到本地。如果之前的缓存文件损坏,重新加载时可能会崩溃。尝试删除默认的缓存目录(通常在C:\Users\<你的用户名>\.cache\huggingface\datasets\),然后重新运行代码
3. 内存溢出 (OOM)
如果
train.txt文件非常大(例如几个 GB),load_dataset在尝试将其一次性加载到内存或进行 Arrow 序列化时,可能会导致内存耗尽崩溃
- 测试小文件:创建一个只有几行文本的小测试文件,将
pc.train_path指向它。如果小文件能正常运行,说明原文件过大,你需要考虑使用streaming=True参数进行流式加载:train_dataset = load_dataset('text', data_files=pc.train_path, streaming=True)
4. 调试
启用底层错误追踪(关键步骤)
由于 Python 默认的报错机制无法捕获底层的内存崩溃,建议在代码的最顶部加入
faulthandler模块,这样在程序崩溃时,控制台会打印出具体是哪一行或哪个底层函数导致了崩溃:
import faulthandler
faulthandler.enable(all_threads=True)
加入这两行代码后重新运行,观察控制台输出的详细日志
- 使用 IDE 的 Debug 模式:在 PyCharm 或 VS Code 中打断点,单步执行到
load_dataset这一行,观察具体在哪一步崩溃。 - 检查控制台输出:仔细查看 PyCharm 运行窗口最上方或最下方,是否有类似
Could not load dynamic library或OP_REQUIRES failed等底层 C++ 库的报错提示,这些提示往往比最终的退出代码更有指向性
通过详细日志打印得出:
Windows fatal exception: access violation
Current thread 0x00015794 (most recent call first):
File "<frozen importlib._bootstrap>", line 488 in _call_with_frames_removed
File "<frozen importlib._bootstrap_external>", line 1297 in exec_module
File "<frozen importlib._bootstrap>", line 935 in _load_unlocked
File "<frozen importlib._bootstrap>", line 1331 in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 1360 in _find_and_load
File "D:\ProgramData\anaconda3\envs\my_conda\Lib\site-packages\pyarrow\dataset.py", line 24 in <module>
File "<frozen importlib._bootstrap>", line 488 in _call_with_frames_removed
File "<frozen importlib._bootstrap_external>", line 995 in exec_module
File "<frozen importlib._bootstrap>", line 935 in _load_unlocked
File "<frozen importlib._bootstrap>", line 1331 in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 1360 in _find_and_load
File "D:\ProgramData\anaconda3\envs\my_conda\Lib\site-packages\datasets\arrow_dataset.py", line 61 in <module>
File "<frozen importlib._bootstrap>", line 488 in _call_with_frames_removed
File "<frozen importlib._bootstrap_external>", line 995 in exec_module
File "<frozen importlib._bootstrap>", line 935 in _load_unlocked
File "<frozen importlib._bootstrap>", line 1331 in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 1360 in _find_and_load
File "D:\ProgramData\anaconda3\envs\my_conda\Lib\site-packages\datasets\__init__.py", line 17 in <module>
File "<frozen importlib._bootstrap>", line 488 in _call_with_frames_removed
File "<frozen importlib._bootstrap_external>", line 995 in exec_module
File "<frozen importlib._bootstrap>", line 935 in _load_unlocked
File "<frozen importlib._bootstrap>", line 1331 in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 1360 in _find_and_load
File "F:\www\py-data\LLM\PET\data_handle\data_preprocess.py", line 6 in <module>
Process finished with exit code -1073741819 (0xC0000005)
问题已经非常明确:
File "D:\ProgramData\anaconda3\envs\my_conda\Lib\site-packages\pyarrow\dataset.py", line 24 in <module>
程序在导入
pyarrow库时直接发生了内存访问冲突(Access Violation),这说明问题出在Anaconda 虚拟环境my_conda中,pyarrow这个底层 C++ 库本身损坏,或者它与当前 Python 版本存在严重的兼容性问题
按照以下步骤依次尝试修复:
5.修复
(1). 重新安装/降级 pyarrow(最可能的解决方案)
pyarrow版本过新或安装时 C++ 依赖损坏都会导致此问题。请在终端激活你的my_conda环境后,执行以下命令:
方法 A:强制重装最新版
pip install pyarrow --force-reinstall --no-cache-dir
方法 B:如果重装最新版依然崩溃,请尝试降级到稳定版本
pip install pyarrow==14.0.2 --force-reinstall
(注:14.x 是目前与多数 Python 3.9/3.10 环境兼容性较好的稳定版本)
(2). 使用 Conda 重装(针对 Anaconda 用户的最佳实践)
由于使用的是 Anaconda 环境,底层 C++ 库有时用
pip安装会出现链接错误,建议优先使用conda来管理pyarrow:
conda activate my_conda
conda uninstall pyarrow
conda install -c conda-forge pyarrow
(3). 排查杀毒软件拦截
Windows 的安全软件(如 360、火绒、迈克菲或 Windows Defender)有时会将
pyarrow加载底层.dll文件的行为误判为恶意注入,从而强行拦截导致内存崩溃
- 测试方法:暂时关闭所有杀毒软件的实时防护,然后重新运行代码。如果正常运行,请将
D:\ProgramData\anaconda3\envs\my_conda\目录加入杀毒软件的白名单。
(4). 检查环境变量冲突
如果 Windows 系统环境变量
PATH中存在其他版本的pyarrow或冲突的 DLL 文件,也会导致加载崩溃
- 测试方法:创建一个全新的虚拟环境,只安装必要的库进行测试:
如果在新环境中不崩溃,说明原环境conda create -n test_pet python=3.10 conda activate test_pet pip install torch datasets transformers python -c "import pyarrow; print(pyarrow.__version__)"my_conda已经严重污染,建议直接重建环境
建议操作顺序:先尝试步骤 1 或 步骤 2 重装
pyarrow,这能解决 90% 以上的此类问题。如果依然报错,则打印Python 版本(在终端输入python --version),确认具体的兼容版本来解决问题这里打印出Python版本:
python --version Python 3.12.4Python 版本是 3.12.4,这是一个非常新的版本
结合之前使用的
datasets库,问题出在 Python 3.12 与pyarrow底层 C++ 扩展的兼容性上,当datasets库尝试导入pyarrow时,由于底层 C++ 指针或内存分配机制在 Python 3.12 中发生了变化,导致了严重的内存访问冲突(Access Violation),要解决这个问题,你有以下两种最佳方案:
方案一:降级 Python 版本(强烈推荐,最稳妥)
在深度学习和 NLP 领域,Python 3.10 或 3.11 是目前兼容性最好、生态最稳定的版本,重新创建一个基于 Python 3.10 的虚拟环境,这能一劳永逸地解决底层库崩溃的问题:
# 1. 创建一个基于 Python 3.10 的新环境
conda create -n pet_env python=3.10
# 2. 激活新环境
conda activate pet_env
# 3. 重新安装你的深度学习依赖
pip install torch transformers datasets pyarrow
方案二:如果必须使用 Python 3.12
如果不想更换 Python 版本,必须确保
pyarrow升级到支持 Python 3.12 的最新版本,在my_conda环境中执行以下命令:
# 强制升级 pyarrow 到最新版,并清理缓存
pip install --upgrade pyarrow --no-cache-dir
(注:pyarrow 在 14.0 之后的版本才正式全面支持 Python 3.12,旧版本在 3.12 下必定崩溃)
总结建议:强烈建议使用方案一,在跑深度学习模型时,使用 Python 3.10 + PyTorch 的组合能帮避开 99% 的底层 C++ 扩展报错问题
更多推荐




所有评论(0)