Document reproducible RKNNLite 2.3.2 installation

This commit is contained in:
Fabio 2026-10-30 17:17:56 +01:00
parent c44ca63f0a
commit ca116d962c
4 changed files with 242 additions and 4 deletions

3
.gitignore vendored
View file

@ -164,3 +164,6 @@ wheels/*
runtime/*
!runtime/aarch64/
!runtime/aarch64/librknnrt.so
# Backup generati dalle patch
*.backup-*

View file

@ -542,3 +542,99 @@ Per ragioni di privacy, copyright e dimensione, il repository non contiene:
- log.
Il modello RKNN pronto è invece incluso tramite Git LFS, insieme al tokenizer necessario.
<!-- BEGIN MANAGED RKNN 2.3.2 INSTALL -->
## Installazione obbligatoria di RKNNLite e librknnrt
Il modello incluso usa **RKNN versione 6**, compilato con **RKNN Toolkit 2.3.2** per **RK3588 / RKNPU v2**.
Requisiti verificati:
- CPython 3.11 aarch64;
- `rknn-toolkit-lite2` 2.3.2;
- `librknnrt.so` 2.3.2;
- driver NPU 0.9.6 o successivo.
Il warning `RKNN_QUERY_INPUT_DYNAMIC_RANGE` è previsto e si può ignorare: il modello ha forma statica a 128 token.
File richiesti dopo `git lfs pull`:
```text
wheels/rknn_toolkit_lite2-2.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
runtime/aarch64/librknnrt.so
rknn/bert-pair-v2-eager-fp16.rknn
assets/tokenizer/tokenizer.json
```
### Scarica gli oggetti Git LFS
```bash
git lfs install
git lfs pull
git lfs checkout
sha256sum -c rknn/bert-pair-v2-eager-fp16.sha256
```
### Crea l'ambiente Python
```bash
python3 -m venv .venv-rknn
source .venv-rknn/bin/activate
python -m pip install --upgrade pip setuptools wheel
python -m pip install -r requirements-rknn.txt
```
### Installa RKNNLite 2.3.2
```bash
python -m pip uninstall -y rknn-toolkit-lite2
python -m pip install wheels/rknn_toolkit_lite2-2.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
```
Verifica:
```bash
python -c 'from importlib.metadata import version; from rknnlite.api import RKNNLite; print(version("rknn-toolkit-lite2"))'
```
Deve stampare `2.3.2`.
### Installa librknnrt 2.3.2
```bash
if [ -e /usr/lib/librknnrt.so ]; then
sudo cp -a /usr/lib/librknnrt.so "/usr/lib/librknnrt.so.backup-$(date +%Y%m%d_%H%M%S)"
fi
sudo install -m 0755 runtime/aarch64/librknnrt.so /usr/lib/librknnrt.so
sudo ldconfig
```
Il warning `/lib/librknnrt.so is not a symbolic link` non blocca il funzionamento.
Verifica che gli hash coincidano:
```bash
sha256sum runtime/aarch64/librknnrt.so /usr/lib/librknnrt.so
```
### Verifica modello e NPU
```bash
python -c 'from pathlib import Path; from rknnlite.api import RKNNLite; m=Path("rknn/bert-pair-v2-eager-fp16.rknn"); r=RKNNLite(verbose=False); a=r.load_rknn(str(m)); print("load_rknn:",a); b=r.init_runtime(core_mask=RKNNLite.NPU_CORE_AUTO) if a==0 else -1; print("init_runtime:",b); r.release(); raise SystemExit(0 if a==0 and b==0 else 1)'
```
Risultato corretto:
```text
librknnrt version: 2.3.2
RKNN Model Information, version: 6
load_rknn: 0
init_runtime: 0
```
Se compare `Invalid RKNN model version 6`, il sistema sta ancora caricando un runtime vecchio, tipicamente `librknnrt 1.4.0`.
Non usare la wheel 2.3.0: incorpora un runtime 1.4.0 incompatibile con il modello versione 6.
<!-- END MANAGED RKNN 2.3.2 INSTALL -->

View file

@ -0,0 +1,140 @@
#!/usr/bin/env python3
from pathlib import Path
from datetime import datetime
import re, shutil
readme = Path('README.md')
req = Path('requirements-rknn.txt')
start = '<!-- BEGIN MANAGED RKNN 2.3.2 INSTALL -->'
end = '<!-- END MANAGED RKNN 2.3.2 INSTALL -->'
section = '''<!-- BEGIN MANAGED RKNN 2.3.2 INSTALL -->
## Installazione obbligatoria di RKNNLite e librknnrt
Il modello incluso usa **RKNN versione 6**, compilato con **RKNN Toolkit 2.3.2** per **RK3588 / RKNPU v2**.
Requisiti verificati:
- CPython 3.11 aarch64;
- `rknn-toolkit-lite2` 2.3.2;
- `librknnrt.so` 2.3.2;
- driver NPU 0.9.6 o successivo.
Il warning `RKNN_QUERY_INPUT_DYNAMIC_RANGE` e previsto e si puo ignorare: il modello ha forma statica a 128 token.
File richiesti dopo `git lfs pull`:
```text
wheels/rknn_toolkit_lite2-2.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
runtime/aarch64/librknnrt.so
rknn/bert-pair-v2-eager-fp16.rknn
assets/tokenizer/tokenizer.json
```
### Scarica gli oggetti Git LFS
```bash
git lfs install
git lfs pull
git lfs checkout
sha256sum -c rknn/bert-pair-v2-eager-fp16.sha256
```
### Crea l'ambiente Python
```bash
python3 -m venv .venv-rknn
source .venv-rknn/bin/activate
python -m pip install --upgrade pip setuptools wheel
python -m pip install -r requirements-rknn.txt
```
### Installa RKNNLite 2.3.2
```bash
python -m pip uninstall -y rknn-toolkit-lite2
python -m pip install \
wheels/rknn_toolkit_lite2-2.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
```
Verifica:
```bash
python -c 'from importlib.metadata import version; from rknnlite.api import RKNNLite; print(version("rknn-toolkit-lite2"))'
```
Deve stampare `2.3.2`.
### Installa librknnrt 2.3.2
```bash
if [ -e /usr/lib/librknnrt.so ]; then
sudo cp -a /usr/lib/librknnrt.so \
"/usr/lib/librknnrt.so.backup-$(date +%Y%m%d_%H%M%S)"
fi
sudo install -m 0755 \
runtime/aarch64/librknnrt.so \
/usr/lib/librknnrt.so
sudo ldconfig
```
Il warning `/lib/librknnrt.so is not a symbolic link` non blocca il funzionamento.
Verifica che gli hash coincidano:
```bash
sha256sum runtime/aarch64/librknnrt.so /usr/lib/librknnrt.so
```
### Verifica modello e NPU
```bash
python -c 'from pathlib import Path; from rknnlite.api import RKNNLite; m=Path("rknn/bert-pair-v2-eager-fp16.rknn"); r=RKNNLite(verbose=False); a=r.load_rknn(str(m)); print("load_rknn:",a); b=r.init_runtime(core_mask=RKNNLite.NPU_CORE_AUTO) if a==0 else -1; print("init_runtime:",b); r.release(); raise SystemExit(0 if a==0 and b==0 else 1)'
```
Risultato corretto:
```text
librknnrt version: 2.3.2
RKNN Model Information, version: 6
load_rknn: 0
init_runtime: 0
```
Se compare `Invalid RKNN model version 6`, il sistema sta ancora caricando un runtime vecchio, tipicamente `librknnrt 1.4.0`.
Non usare la wheel 2.3.0: incorpora un runtime 1.4.0 incompatibile con il modello versione 6.
<!-- END MANAGED RKNN 2.3.2 INSTALL -->'''
def backup(p):
if p.exists():
b = p.with_name(p.name + '.backup-' + datetime.now().strftime('%Y%m%d_%H%M%S'))
shutil.copy2(p, b)
print('Backup:', b)
if not readme.exists():
readme.write_text('# EPUB Corrector RKNN\n', encoding='utf-8')
backup(readme)
text = readme.read_text(encoding='utf-8')
pattern = re.compile(re.escape(start) + r'.*?' + re.escape(end), re.S)
text = pattern.sub(section, text, count=1) if pattern.search(text) else text.rstrip() + '\n\n' + section + '\n'
readme.write_text(text, encoding='utf-8')
print('Aggiornato:', readme)
if not req.exists():
req.write_text('', encoding='utf-8')
backup(req)
lines=[]
for line in req.read_text(encoding='utf-8').splitlines():
if 'rknn_toolkit_lite2' in line and '.whl' in line:
continue
if '/home/nvme/epub-gec-experiment' in line:
continue
lines.append(line)
while lines and not lines[-1].strip():
lines.pop()
lines += ['', '# RKNNLite 2.3.2 va installato separatamente:', '# python -m pip install wheels/rknn_toolkit_lite2-2.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl', '# Installare anche runtime/aarch64/librknnrt.so in /usr/lib/librknnrt.so.']
req.write_text('\n'.join(lines)+'\n', encoding='utf-8')
print('Aggiornato:', req)
print('Controlla con: git diff -- README.md requirements-rknn.txt')

View file

@ -2,8 +2,7 @@ Flask==3.1.3
lxml==6.1.3
numpy==2.4.6
requests==2.34.2
rknn-toolkit-lite2 @ file:///home/nvme/epub-gec-experiment/rknn-toolkit2-v2.3.2/rknn-toolkit-lite2/packages/rknn_toolkit_lite2-2.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl#sha256=bda74f1179e15fccb8726054a24898982522784b65bb340b20146955d254e800
tokenizers==0.22.2
# RKNNLite 2.3.2 deve essere installato dalla wheel Rockchip
# compatibile con Python 3.11, Linux aarch64 e RK3588.
# RKNNLite 2.3.2 va installato separatamente:
# python -m pip install wheels/rknn_toolkit_lite2-2.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
# Installare anche runtime/aarch64/librknnrt.so in /usr/lib/librknnrt.so.