Document reproducible RKNNLite 2.3.2 installation
This commit is contained in:
parent
c44ca63f0a
commit
ca116d962c
4 changed files with 242 additions and 4 deletions
3
.gitignore
vendored
3
.gitignore
vendored
|
|
@ -164,3 +164,6 @@ wheels/*
|
||||||
runtime/*
|
runtime/*
|
||||||
!runtime/aarch64/
|
!runtime/aarch64/
|
||||||
!runtime/aarch64/librknnrt.so
|
!runtime/aarch64/librknnrt.so
|
||||||
|
|
||||||
|
# Backup generati dalle patch
|
||||||
|
*.backup-*
|
||||||
|
|
|
||||||
96
README.md
96
README.md
|
|
@ -542,3 +542,99 @@ Per ragioni di privacy, copyright e dimensione, il repository non contiene:
|
||||||
- log.
|
- log.
|
||||||
|
|
||||||
Il modello RKNN pronto è invece incluso tramite Git LFS, insieme al tokenizer necessario.
|
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 -->
|
||||||
|
|
|
||||||
140
patch_readme_rknn_install.py
Normal file
140
patch_readme_rknn_install.py
Normal 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')
|
||||||
|
|
@ -2,8 +2,7 @@ Flask==3.1.3
|
||||||
lxml==6.1.3
|
lxml==6.1.3
|
||||||
numpy==2.4.6
|
numpy==2.4.6
|
||||||
requests==2.34.2
|
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
|
tokenizers==0.22.2
|
||||||
|
# RKNNLite 2.3.2 va installato separatamente:
|
||||||
# RKNNLite 2.3.2 deve essere installato dalla wheel Rockchip
|
# python -m pip install wheels/rknn_toolkit_lite2-2.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
|
||||||
# compatibile con Python 3.11, Linux aarch64 e RK3588.
|
# Installare anche runtime/aarch64/librknnrt.so in /usr/lib/librknnrt.so.
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue