From ca116d962c6b1cc4aaf89a7531992cd9a25d078c Mon Sep 17 00:00:00 2001 From: Fabio Date: Fri, 30 Oct 2026 17:17:56 +0100 Subject: [PATCH] Document reproducible RKNNLite 2.3.2 installation --- .gitignore | 3 + README.md | 96 ++++++++++++++++++++++++ patch_readme_rknn_install.py | 140 +++++++++++++++++++++++++++++++++++ requirements-rknn.txt | 7 +- 4 files changed, 242 insertions(+), 4 deletions(-) create mode 100644 patch_readme_rknn_install.py diff --git a/.gitignore b/.gitignore index 65e5b44..98185aa 100644 --- a/.gitignore +++ b/.gitignore @@ -164,3 +164,6 @@ wheels/* runtime/* !runtime/aarch64/ !runtime/aarch64/librknnrt.so + +# Backup generati dalle patch +*.backup-* diff --git a/README.md b/README.md index 5a8b3fb..1b939a5 100644 --- a/README.md +++ b/README.md @@ -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. + + +## 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. + diff --git a/patch_readme_rknn_install.py b/patch_readme_rknn_install.py new file mode 100644 index 0000000..974d664 --- /dev/null +++ b/patch_readme_rknn_install.py @@ -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 = '' +end = '' +section = ''' +## 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. +''' + +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') diff --git a/requirements-rknn.txt b/requirements-rknn.txt index 0c51d2e..c10e765 100644 --- a/requirements-rknn.txt +++ b/requirements-rknn.txt @@ -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.