140 lines
4.2 KiB
Python
140 lines
4.2 KiB
Python
#!/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')
|