particle_transformer
## 论文
`Particle Transformer for Jet Tagging`
* https://arxiv.org/abs/2202.03772
## 模型结构
该模型是一种基于 Transformer 的架构,通过成对粒子交互功能进行了增强,这些功能作为softmax之前的偏差合并到多头注意力中。
## 算法原理
该算法利用 Transformer 架构处理粒子云数据。Transformer 通过自注意力机制捕捉粒子之间的复杂关系,并学习粒子的全局特征。
## 环境配置
### Docker(方法一)
docker pull image.sourcefind.cn:5000/dcu/admin/base/pytorch:2.1.0-ubuntu22.04-dtk24.04.3-py3.10
docker run --shm-size 50g --network=host --name=pt --privileged --device=/dev/kfd --device=/dev/dri --group-add video --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -v 项目地址(绝对路径):/home/ -v /opt/hyhal:/opt/hyhal:ro -it bash
### Dockerfile(方法二)
docker build -t : .
docker run --shm-size 50g --network=host --name=pt --privileged --device=/dev/kfd --device=/dev/dri --group-add video --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -v 项目地址(绝对路径):/home/ -v /opt/hyhal:/opt/hyhal:ro -it bash
### Anaconda (方法三)
1、关于本项目DCU显卡所需的特殊深度学习库可从光合开发者社区下载安装:
https://developer.sourcefind.cn/tool/
DTK驱动:dtk24.04.3
python:python3.10
torch: 2.1.0
torchvision: 0.16.0
Tips:以上dtk驱动、python、torch等DCU相关工具版本需要严格一一对应
## 数据集
可使用脚本下载数据集:
```bash
./get_datasets.py [JetClass|QuarkGluon|TopLandscape] [-d DATA_DIR]
```
```
datasets/
├── JetClass
│ └── Pythia
│ ├── test_20M
│ ├── train_100M
│ └── val_5M
├── QuarkGluon
│ ├── test_file_*.parquet
│ └── train_file_*.parquet
└── TopLandscape
├── test_file.parquet
├── train_file.parquet
└── val_file.parquet
```
## 训练
```bash
pip install 'weaver-core>=0.4'
```
```bash
# 在JetClass数据集上训练
./train_JetClass.sh [ParT|PN|PFN|PCNN] [kin|kinpid|full] ...
# 在QuarkGluon数据集上训练
./train_QuarkGluon.sh [ParT|ParT-FineTune|PN|PN-FineTune|PFN|PCNN] [kin|kinpid|kinpidplus] ...
# 在TopLandscape数据集上训练
./train_TopLandscape.sh [ParT|ParT-FineTune|PN|PN-FineTune|PFN|PCNN] [kin] ...
```
其中第一个参数表示使用的网络,分别是
- ParT: Particle Transformer
- PN: ParticleNet
- PFN: Particle Flow Network
- PCNN: P-CNN
- xxx-FineTune: 使用预训练模型微调
第二个参数表示输入的特征集合,分别是
- kin: only kinematic inputs
- kinpid: kinematic inputs + particle identification
- full: kinematic inputs + particle identification + trajectory displacement
### 多卡训练
```bash
# DP - pytorch
./train_JetClass.sh ParT full --gpus 0,1,2,3 --batch-size [total_batch_size] ...
# DDP - pytorch
DDP_NGPUS=4 ./train_JetClass.sh ParT full --batch-size [batch_size_per_gpu] ...
```
## 推理
```bash
bash test_QuarkGluon_demo.sh
```
注意:该推理脚本仅供参考,具体见[weaver-core](https://github.com/hqucms/weaver-core)。
## result

### 精度
所有模型均选择ParT,以下结果仅展示不同加速卡在相同配置下的训练精度差异,并不代表可得到的最高精度。
仅记录AvgAcc.
|加速卡|JetClass|QuarkGluon(kinpidplus)|TopLandscape(kin)|
|:---:|:---:|:---:|:---:|
|K100_AI|0.6219|0.8495|0.93975|
|GPU|0.620|0.84921|0.93987|
## 应用场景
### 算法类别
`ai for science`
### 热点应用行业
`高能物理,医疗,金融`
## 源码仓库及问题反馈
* https://developer.sourcefind.cn/codes/modelzoo/particle_transformer_pytorch
## 参考资料
* https://github.com/jet-universe/particle_transformer
* https://github.com/hqucms/weaver-core