Token Classification
TensorRT
ONNX
Russian
bert
cuda
cuda-graphs
fp16
pii
ner
named-entity-recognition
russian
Eval Results (legacy)
Instructions to use lockR/rubert-base-pii-ner-tensorrt with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- TensorRT
How to use lockR/rubert-base-pii-ner-tensorrt with TensorRT:
# No code snippets available yet for this library. # To use this model, check the repository files and the library's documentation. # Want to help? PRs adding snippets are welcome at: # https://github.com/huggingface/huggingface.js
- Notebooks
- Google Colab
- Kaggle
File size: 11,234 Bytes
73be581 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 | ---
license: apache-2.0
language:
- ru
base_model: redmadrobot-rnd/rubert-base-pii-ner
pipeline_tag: token-classification
datasets:
- redmadrobot-rnd/pii_train
tags:
- tensorrt
- cuda
- cuda-graphs
- fp16
- pii
- ner
- named-entity-recognition
- russian
model-index:
- name: lockR/rubert-base-pii-ner-tensorrt (FP16 + CUDA Graphs)
results:
- task:
type: token-classification
name: Russian PII named entity recognition
dataset:
type: redmadrobot-rnd/pii_benchmark
name: Russian PII Benchmark — all 21 entity types
split: test
revision: f77ea831274daf980cc45c61a93c226be9d978d6
metrics:
- type: precision
name: Exact character-span micro-precision (21 types)
value: 0.8087260034904014
- type: recall
name: Exact character-span micro-recall (21 types)
value: 0.8254364089775561
- type: f1
name: Exact character-span micro-F1 (21 types)
value: 0.8169957686882934
---
# ruBERT PII NER — TensorRT FP16 + CUDA Graphs
An optimized **TensorRT FP16 inference export** of
[redmadrobot-rnd/rubert-base-pii-ner](https://huggingface.co/redmadrobot-rnd/rubert-base-pii-ner),
with a runtime that reuses CUDA Graphs for low-latency Russian personal-data
and identity-document recognition.
On an NVIDIA RTX 4070 Ti SUPER, the supplied runtime achieved **1.089 ms p50
and 2.944 ms p95 end-to-end latency**: **5.87× faster at the median** than the
remeasured PyTorch FP32 baseline. Exact span micro-F1 changed by
**−0.039 percentage points** on all 2,841 benchmark texts.
The original fine-tuning belongs to Red Mad Robot R&D. This repository adds
an inference export and runtime, with **no additional training or fine-tuning**.
The engine uses FP16 with FP32 normalization accumulation; no Unsloth, INT8,
or 4-bit quantization was used.
The prebuilt engine targets **RTX 4070 Ti SUPER and TensorRT 10.13.3.9**.
Rebuild it on your deployment GPU using the supplied ONNX file and build
script. For an option that does not require building a TensorRT engine, see
the sibling [ONNX Runtime export](https://huggingface.co/lockR/rubert-base-pii-ner-onnx).
## Quickstart
Use Python 3.12 and an NVIDIA GPU with a driver compatible with the CUDA 12.8
PyTorch runtime. The pinned dependencies are in `requirements.txt`.
```bash
python -m pip install "huggingface_hub==0.36.2"
hf download lockR/rubert-base-pii-ner-tensorrt --local-dir rubert-pii-trt
cd rubert-pii-trt
python -m pip install -r requirements.txt
# Build on your deployment GPU when its GPU/software stack differs.
python build_trt.py --onnx model.onnx --output model.fp16.engine
python pii_ner.py 'Иванов Пётр Сергеевич, паспорт 45 11 123456, тел. +7 999 123-45-67' --backend trt-graph
```
From Python, with the downloaded repository on the import path:
```python
from pii_ner import PiiNER
ner = PiiNER(model_dir=".", backend="trt-graph")
ner.warmup() # Capture all graph buckets before serving requests.
entities = ner.predict("Иванов Пётр, паспорт 45 11 123456")
print(entities)
results = ner.predict_batch([
"Почта: elena@pochta.ru",
"Телефон: +7 999 123-45-67",
])
```
Each entity contains `label`, `start`, `end`, `text`, and `score`. Offsets refer
to the original Python string; `end` is exclusive. Create the instance once
and reuse it. `backend="trt-fp16"` selects the same engine without CUDA Graphs.
The runtime uses 512-token sliding windows with 128-token overlap, a fixed
confidence threshold of 0.3, and batch size 1 by default. It resolves
overlapping window predictions and joins adjacent same-type fragments,
including fragments separated only by whitespace. Long texts are processed
through multiple windows. This postprocessing is part of the reported
quality and latency.
## What is included
| File | Purpose |
|---|---|
| `model.fp16.engine` | Prebuilt TensorRT engine, approximately 359 MB |
| `model.onnx` | Original FP32 ONNX graph for rebuilding, approximately 711 MB |
| `build_trt.py` | FP16 engine builder with FP32 normalization accumulation |
| `trt_backend.py` | TensorRT buffers, execution contexts, and CUDA Graphs |
| `pii_ner.py` | Tokenization, windowing, and character-span decoding |
| `config.json`, tokenizer files | Original label mapping and tokenizer |
| `requirements.txt` | Pinned runtime dependencies |
The engine's dynamic shape profile is **min `(1, 2)`, opt `(1, 128)`, max
`(32, 512)`**, expressed as `(batch, sequence)`. The build uses a 4 GiB
workspace limit and disables TF32. Inputs are `input_ids`, `attention_mask`,
and `token_type_ids`; output is `logits[batch, sequence, 43]`.
For batch size 1, the runtime retains CUDA Graphs for sequence-length
**buckets 32, 64, 128, 256, and 512**. Each bucket owns a context and stable
buffers, while engine weights are shared. First use creates and captures the
bucket; later requests replay it. Larger batches use ordinary dynamic
TensorRT execution. An instance serializes GPU calls to protect its reusable
contexts and buffers. These are runtime optimizations; graphs are captured
on the target machine and are not stored in the engine file.
## Speed and quality
Quality uses all **2,841 test texts and 5,614 annotated entities** in
[redmadrobot-rnd/pii_benchmark](https://huggingface.co/datasets/redmadrobot-rnd/pii_benchmark).
Precision, recall, and F1 below are percentages; a correct prediction must
match both character boundaries and one of the 21 original entity types.
| Runtime | Precision | Recall | Exact micro-F1 | F1 change, pp | p50, ms | p95, ms | p50 speedup |
|---|---:|---:|---:|---:|---:|---:|---:|
| PyTorch FP32 baseline | 80.932 | 82.561 | 81.739 | — | 6.387 | 18.346 | 1.00× |
| TensorRT FP16 | 80.873 | 82.544 | 81.700 | −0.039 | 2.198 | 5.565 | 2.91× |
| **TensorRT FP16 + CUDA Graphs** | **80.873** | **82.544** | **81.700** | **−0.039** | **1.089** | **2.944** | **5.87×** |
With CUDA Graphs, entity spans differed from the FP32 baseline on **10 of
2,841 documents**; confidence scores are not included in this count.
The largest per-type F1 declines were **0.611 percentage points for COUNTRY**
and **0.386 points for INN**. Aggregate recall changed by **−0.018 percentage
points**. The two TensorRT modes have the same aggregate metrics here but
are not guaranteed to produce identical spans on every input.
**Timing protocol.** Warm, sequential, local document requests at batch size 1:
256 texts sampled with seed 42, 30 warm-up requests, then three repetitions
(768 timings per backend). End-to-end latency includes tokenization, every
sliding window, CPU↔GPU transfers, synchronized GPU completion, and entity
decoding. It excludes loading, HTTP, queueing, and concurrent serving. The
three repetitions reuse the same 256 texts. Long-document windows run
sequentially. TF32 was disabled for the FP32 baseline. The reported warm
latency does not represent first-use graph capture or cold-start latency.
**Environment.** NVIDIA GeForce RTX 4070 Ti SUPER, compute capability 8.9;
Linux under WSL2; Python 3.12.11; PyTorch 2.8.0 with CUDA 12.8;
TensorRT 10.13.3.9 (CUDA 12 package); Transformers 4.57.1;
ONNX 1.19.1; NumPy 2.5.3; Tokenizers 0.22.2.
**Evaluation protocol.** All backends share the tokenizer, decoder, confidence
threshold, and inputs. Gold BIO boundaries and original texts are preserved;
no threshold was tuned on the test split. Two rows contain an annotated
`WWW` token for original text `www`; an explicitly recorded, equal-length
case-insensitive alignment preserves their original offsets. No rows were
excluded.
The upstream card reports 83.6 F1 for a folded 14-category exact-match
protocol and 94.7 F1 for PERSON/LOCATION overlap matching. Those scores use
different evaluation scopes and must not be directly compared with the
21-type exact-match scores above. The quality-preservation reference here is
the **remeasured upstream PyTorch FP32 model under the same protocol**.
## Entity types
Architecture: `BertForTokenClassification`, 12 layers, hidden size 768,
12 attention heads, and 177,749,803 source parameters.
The original 43-label BIO head is retained: `O`, plus `B-` and `I-` for each
of these 21 types.
| Group | Labels |
|---|---|
| Names | `FIRST_NAME`, `LAST_NAME`, `MIDDLE_NAME` |
| Addresses | `COUNTRY`, `REGION`, `DISTRICT`, `CITY`, `STREET`, `HOUSE` |
| Contacts and network identifiers | `EMAIL`, `PHONE`, `URL`, `IP_ADDRESS` |
| Document and payment identifiers | `PASSPORT`, `INN`, `SNILS`, `OMS`, `CREDIT_CARD`, `DRIVER_LICENSE`, `MILITARY_ID`, `BIRTH_CERTIFICATE` |
## Origin, evaluation artifacts, and limitations
The [upstream model card](https://huggingface.co/redmadrobot-rnd/rubert-base-pii-ner)
describes fine-tuning `ai-forever/ruBert-base` on
[redmadrobot-rnd/pii_train](https://huggingface.co/datasets/redmadrobot-rnd/pii_train):
17,137 annotated Russian sentences with 39,687 spans. The original authors
report 10 epochs, learning rate 3e-5, batch size 16, and a maximum sequence
length of 512. These are upstream training details; this export used no
training data or calibration set. `pii_benchmark` was used only for evaluation.
The source model is pinned to
[`c802e8cd26f85d1cf920973ea6f83965a0618d63`](https://huggingface.co/redmadrobot-rnd/rubert-base-pii-ner/tree/c802e8cd26f85d1cf920973ea6f83965a0618d63),
and the benchmark to
[`f77ea831274daf980cc45c61a93c226be9d978d6`](https://huggingface.co/datasets/redmadrobot-rnd/pii_benchmark/tree/f77ea831274daf980cc45c61a93c226be9d978d6).
See the [full comparison](results/summary.md),
[CUDA Graphs metrics](results/trt-graph.json),
[ordinary TensorRT metrics](results/trt-fp16.json), and
[reproduction instructions](reproduce/README.md). The repository includes
timing samples, environment metadata, and export/build provenance so that
the reported comparison can be audited.
**Engine portability.** The supplied engine is specific to its build GPU and
TensorRT/software environment. Matching compute capability alone does not
establish compatibility. Rebuild on the deployment GPU after changing the
GPU or TensorRT stack, and remeasure quality and latency. Builder tactics,
hardware, and software versions can affect both numerical output and speed.
Only the named build environment was measured; no universal 1 ms latency
claim is made. CUDA Graphs also require stable, retained execution resources,
and first requests incur initialization costs.
This is a Russian PII recognizer, not a complete anonymization pipeline. It
can miss entities or mark non-PII text as PII; a high aggregate F1 does not
guarantee complete removal of personal data. The upstream model's weak
`IP_ADDRESS` handling is inherited. Types outside the 21-label head, such as
`DATE_TIME`, `BANK_ACCOUNT`, `BIK`, and `TELEGRAM`, require other components.
Performance on other languages, domains, GPUs, and concurrency patterns has
not been established by this benchmark.
**License and credit:** Apache-2.0, retaining the original model license.
Credit Red Mad Robot R&D for the model, training data, and benchmark, and cite
the [original model repository](https://huggingface.co/redmadrobot-rnd/rubert-base-pii-ner)
alongside this export when reporting results.
|