#!/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')