
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
由于uproot近期更新,若在最新容器中遇到导入问题,请将import uproot改为import uproot3。
DeepJetCore是一个用于高能物理(HEP)领域深度神经网络训练和评估的工具包。该镜像提供内存外训练、重采样和基本评估等核心功能,适用于处理HEP领域的大规模数据。使用时,用户只需适配两个文件:训练数据结构(描述如何从ROOT树填充numpy数组)和DNN模型本身,两者需在额外的用户包中定义。
引用说明:若使用DeepJetCore或相关容器,请在(内部)文档和报告中提及,并引用zenodo条目:[***]
每个版本的容器均发布在DockerHub,最新发布版本已标记,latest标签对应开发中的master分支。
镜像拉取
bashdocker pull cernml4reco/deepjetcore3:latest
容器构建(高级用户)
构建分为两阶段:
bashcd docker docker build -f Dockerfile_base -t cernml4reco/djcbase:py3 .
注意:请使用发布版本,而非开发中的master分支!
bash/eos/home-j/jkiesele/singularity/run_deepjetcore3.sh
bash/eos/home-j/jkiesele/singularity/run_deepjetcore3_lxplus.sh
订阅e-group
ml-deepjetcore的用户可获得容器读取权限
Singularity缓存设置
Singularity缓存目录通常位于~/.singularity/cache,可能占用大量空间。建议将缓存设置到/tmp或work afs:
bashexport SINGULARITY_CACHEDIR="/tmp/$(whoami)/singularity"
提示:Singularity有时需要尝试2-3次才能成功拉取容器,容器启动后运行稳定。"缺少用户组"的提示可安全忽略。
LD_LIBRARY或PYTHONPATH环境变量bashgit clone https://github.com/DL4Jets/DeepJetCore.git cd DeepJetCore # 创建环境(包含ROOT、tensorflow-gpu、CUDA等,耗时较长) conda env create -f conda_env.yml # 若失败,使用conda_env_exact.yml(版本完全固定) conda activate DJC2 # 设置路径 source docker_env.sh # 编译模块 cd compiled make -f Makefile_conda -j4 # Conda需要 slightly不同的库名称
DeepJetCore是工具集,不提供现成训练代码。需通过createSubpackage.py创建包含示例代码的子包(subpackage)。使用--data选项可生成约150MB的示例数据集。子包创建脚本会输出详细使用说明,以下为基本流程:
设置环境:在子包目录中source环境脚本(env.sh),不要在DeepJetCore目录中执行
定义训练数据结构:
subpackage/modules/datastructures转换ROOT文件为训练格式:
使用convertFromSource.py转换数据,输入为包含ROOT文件列表的文本文件:
bash# 转换训练数据 convertFromSource.py -i <输入文本文件> -o <训练文件输出目录> -c TrainData_example
TrainData_example为之前定义的数据结构,测试数据将直接从源文件读取
模型训练:
convertFromSource.py生成数据文件和描述符(dataCollection.djcdc),将其传入训练脚本:
bashpython3 training_example.py /path/to/data/dataCollection.djcdc <模型输出目录>
查看更多选项:python3 training_example.py -h
模型预测: 对测试数据进行预测:
bashpredict.py /path/to/the/model.h5 /path/to/the/training/dataCollection.djcdc <测试文件列表文本> <预测输出目录>
注意:预测输出可能较大(示例中不会)
结果评估:
使用DeepJetCore/evaluation/evaluation.py中的工具绘制ROC曲线等,输入为predict.py生成的文本文件
TensorFlow 1.X兼容处理
旧子包可在__init__.py中添加以下代码以兼容TensorFlow 2.0:
pythonimport sys import tensorflow tensorflow.compat.v1.disable_eager_execution() sys.modules["tensorflow"]=tensorflow.compat.v1
TrainData类已大幅简化,仅需定义以下接口函数(其他函数已弃用):
createWeighterObjects(self, allsourcefiles)(可选)
**convertFromSourceFile(self, filename, weighterobjects, istraining, kwargs)(必需)
writeOutPrediction(self, predicted, features, truth, weights, outfilename, inputfile)(必需)
内置权重功能需在用户代码中重新实现(在createWeighterObjects中),旧实现参考:https://github.com/DL4Jets/DeepJetCore/blob/1.X/TrainData.py#L657-L672
部分支持一维不规则张量(第一维度不规则),适用于每个事件输入数量不同但特征长度固定的场景。
convertFromSourceFile需返回DeepJetCore.SimpleArray对象列表(而非numpy数组列表)SimpleArray由两个numpy数组构造:
createFromNumpy(data, row_splits)模型将接收张量列表,第一个为数据,第二个为行分割,真值处理方式相同,以规避Keras对不规则张量的支持限制。
可绕过training_base类直接使用数据管道,示例代码:
pythonfrom DeepJetCore.DataCollection import DataCollection train_data = DataCollection("path/to/your/dataCollection.dc") # 从训练数据中拆分10%作为验证数据 val_data = train_data.split(0.9) # 设置批大小 # 若数据在维度1不规则,批大小为每批最大元素数 # 例如:批大小100时,50+48个元素的两个样本会组成一批(共98个元素) train_data.setBatchSize(100) # 准备生成器 gen = train_data.invokeGenerator() # epoch循环 for epoch in range(num_epochs): gen.shuffleFilelist() gen.prepareNextEpoch() # 不规则数据时,批次数可能因epoch而异 nbatches = gen.getNBatches() generator = gen.feedNumpyData() for b in range(nbatches): if gen.isEmpty(): raise Exception("数据耗尽(可能文件损坏)") # 权重可选,每个均为numpy数组列表 features_list, truth_list, weight_list = next(generator) # 训练代码
开发建议:
sourc docker_env.sh设置环境compiled目录编译包:
bashcd compiled make -j5
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务