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:
2026-06-11 16:19:21 +03:00
parent 1b3206b6a7
commit 71862bbeca
9 changed files with 539 additions and 14 deletions

View File

@@ -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% ускорения без переобучения
### Модели и бенчмарки