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/aarch64/
|
||||
!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.
|
||||
|
||||
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
|
||||
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.
|
||||
|
|
|
|||
Loading…
Reference in a new issue