DCNv4 INT8 patch (Level 1): int8 storage + fp32 arithmetic for SOFIA/MERIDIAN E9
- Add dcnv4_int8_cuda.cu/.h: CUDA kernel (int8 values, fp16 offsets, fp32 interp, requantize with value_scale/output_scale) - Add dcnv4_int8_forward(): inference-only functional wrapper (@no_grad) - Add DCNv4Strip.forward_int8(): module-level INT8 forward (without_pointwise=True) - Add scripts/test_dcnv4_int8.py: correctness gate (<=1 LSB, >=99% exact) and informational fp16 vs int8 benchmark - Update README: INT8 API section, updated structure tree, SOFIA/MERIDIAN context Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
87
README.md
87
README.md
@@ -1,6 +1,6 @@
|
||||
## DCNv4 — Custom Op Mirror
|
||||
|
||||
**Зеркало для:** Pikaliov (CVGL-project)
|
||||
**Зеркало для:** Pikaliov (CVGL/MERIDIAN project)
|
||||
**Email:** i@pikaliov.ru
|
||||
**Gitea репо:** https://git.lissad.keenetic.name/Pikaliov/DCN_custom_op
|
||||
**Upstream:** https://github.com/OpenGVLab/DCNv4
|
||||
@@ -15,30 +15,93 @@ cd DCNv4_op
|
||||
pip install -e .
|
||||
```
|
||||
|
||||
**Требования:** CUDA toolkit + PyTorch (совместимые версии с nvcc)
|
||||
**Импорт:** `from DCNv4 import DCNv4`
|
||||
**Требования:** CUDA toolkit + PyTorch (совместимые версии с nvcc)
|
||||
|
||||
```python
|
||||
from DCNv4 import DCNv4, DCNv4Strip
|
||||
from DCNv4.functions import DCNv4Function, dcnv4_int8_forward
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### INT8-патч (SOFIA/MERIDIAN, E9)
|
||||
|
||||
Этот форк расширяет upstream добавлением **INT8 inference пути (Level 1)**: int8 хранение значений + fp32 арифметика интерполяции. Предназначен для E9 QAT-эксперимента MERIDIAN (Jetson Orin NX, TensorRT INT8).
|
||||
|
||||
#### Что добавлено
|
||||
|
||||
| Файл | Описание |
|
||||
|------|----------|
|
||||
| `src/cuda/dcnv4_int8_cuda.cu/.h` | CUDA-ядро: int8 значения, fp16 offsets, fp32 интерполяция, requant |
|
||||
| `DCNv4/functions/dcnv4_func.py` | `dcnv4_int8_forward()` — функциональный INT8 forward |
|
||||
| `DCNv4/modules/dcnv4.py` | `DCNv4Strip.forward_int8()` — INT8 forward на уровне модуля |
|
||||
| `scripts/test_dcnv4_int8.py` | Тесты корректности + бенчмарк |
|
||||
|
||||
#### API
|
||||
|
||||
```python
|
||||
# Функциональный INT8 forward (inference-only, @no_grad)
|
||||
out_int8 = dcnv4_int8_forward(
|
||||
value_int8, # int8 [B, H, W, C]
|
||||
offset_mask_fp16, # fp16 [B, H, W, padded_dim]
|
||||
kernel_h, kernel_w, pad_h, pad_w,
|
||||
group, group_channels, offset_scale,
|
||||
value_scale, output_scale, # per-tensor quant scales
|
||||
) # -> int8 [B, H, W, C]
|
||||
|
||||
# Модульный INT8 forward (DCNv4Strip, without_pointwise=True)
|
||||
out_int8 = strip_module.forward_int8(
|
||||
input_int8, # int8 [N, L, C]
|
||||
shape=(H, W),
|
||||
value_scale=vs,
|
||||
output_scale=os,
|
||||
) # -> int8 [N, L, C]
|
||||
```
|
||||
|
||||
**Ограничения:** stride=1, dilation=1, "same" padding, `group_channels % 4 == 0`, `without_pointwise=True` для модульного API.
|
||||
|
||||
#### Проверка INT8
|
||||
|
||||
```bash
|
||||
cd DCNv4_op && pip install -e .
|
||||
python scripts/test_dcnv4_int8.py
|
||||
# Проверяет: (3x3), (1x9)/(9x1) strip, SOFIA Stage-1 (C=192, G=12)
|
||||
# PASS: max |int8_out - quantize(fp32_out)| <= 1 LSB, >=99% exact match
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Структура проекта
|
||||
|
||||
```
|
||||
├── DCNv4_op/ ← PyTorch CUDA-расширение (главный модуль)
|
||||
│ ├── src/ ← CUDA/C++ источники
|
||||
│ ├── DCNv4/ ← Python пакет DCNv4
|
||||
│ └── setup.py ← Сборка (требует CUDA)
|
||||
├── DCNv4_op/ ← PyTorch CUDA-расширение (главный модуль)
|
||||
│ ├── src/
|
||||
│ │ ├── cuda/
|
||||
│ │ │ ├── dcnv4_cuda.cu ← upstream fp16/fp32 ядро
|
||||
│ │ │ ├── dcnv4_int8_cuda.cu ← INT8 ядро (SOFIA/MERIDIAN)
|
||||
│ │ │ └── dcnv4_int8_cuda.h
|
||||
│ │ ├── dcnv4.h
|
||||
│ │ └── vision.cpp
|
||||
│ ├── DCNv4/ ← Python пакет DCNv4
|
||||
│ │ ├── functions/dcnv4_func.py ← DCNv4Function + dcnv4_int8_forward
|
||||
│ │ └── modules/dcnv4.py ← DCNv4, DCNv4Strip + forward_int8
|
||||
│ ├── scripts/
|
||||
│ │ └── test_dcnv4_int8.py ← INT8 correctness gate
|
||||
│ └── setup.py
|
||||
├── classification/ ← ImageNet классификация + FlashInternImage
|
||||
├── detection/ ← COCO detection & segmentation (Mask R-CNN, DINO)
|
||||
├── segmentation/ ← ADE20K semantic segmentation (UperNet, Mask2Former)
|
||||
├── README.md ← Этот файл + оригинальный OpenGVLab README
|
||||
├── README.md
|
||||
└── LICENSE ← Apache-2.0
|
||||
```
|
||||
|
||||
### Что такое DCNv4?
|
||||
|
||||
**Deformable Convolution v4** — высокоэффективный оператор для vision-моделей:
|
||||
- 🚀 **3× быстрее** чем DCNv3 (speedup на forward pass)
|
||||
- ⚡ **Лучше сходится** (более быстрая конвергенция при обучении)
|
||||
- 🎯 **Универсальность:** image classification, detection, segmentation, generation (т.е. diffusion models)
|
||||
- 🔧 **Интеграция:** замена DCNv3 → DCNv4 в InternImage дает +80% ускорения без переобучения
|
||||
- **3× быстрее** чем DCNv3 (speedup на forward pass)
|
||||
- **Лучше сходится** (более быстрая конвергенция при обучении)
|
||||
- **Универсальность:** image classification, detection, segmentation, generation (diffusion models)
|
||||
- **Интеграция:** замена DCNv3 → DCNv4 в InternImage дает +80% ускорения без переобучения
|
||||
|
||||
### Модели и бенчмарки
|
||||
|
||||
|
||||
Reference in New Issue
Block a user