init th1520-npu

Signed-off-by: Han Gao <gaohan@iscas.ac.cn>
This commit is contained in:
Han Gao
2024-05-10 17:19:50 +08:00
commit 4897d8e568
30 changed files with 396 additions and 0 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

14
addons/usr/share/npu/insmod.sh Executable file
View File

@@ -0,0 +1,14 @@
#!/bin/sh
KERNEL_VER=$(uname -r)
BASE_PATH=/lib/modules/${KERNEL_VER}/extra
insmod $BASE_PATH/img_mem.ko
insmod $BASE_PATH/vha.ko onchipmem_phys_start=0xffe0001000 onchipmem_size=0x100000 freq_khz=792000
insmod $BASE_PATH/vha_info.ko
#if [ -f /sys/kernel/debug/dynamic_debug/control ]; then
# echo -n 'module vha +p' > /sys/kernel/debug/dynamic_debug/control;
# echo -n 'module img_mem +p' > /sys/kernel/debug/dynamic_debug/control;
#fi
chmod a+rw /dev/vha0

10
addons/usr/share/npu/rmmod.sh Executable file
View File

@@ -0,0 +1,10 @@
#!/bin/sh
#if [ -f /sys/kernel/debug/dynamic_debug/control ]; then
# echo -n 'module vha -p' > /sys/kernel/debug/dynamic_debug/control;
# echo -n 'module img_mem -p' > /sys/kernel/debug/dynamic_debug/control;
#fi
rmmod vha_info
rmmod vha
rmmod img_mem

View File

@@ -0,0 +1,26 @@
#!/bin/bash
top_label(){
python3 ./bin/print_top_labels.py --n-top=$3 --labels $2 --net-out $1
}
read_dir(){
for file in `ls -a $1`
do
if [ -d $1"/"$file ]
then
if [[ $file != '.' && $file != '..' ]]
then
read_dir $1"/"$file
fi
else
if [[ "${file##*.}" = 'out' ]]
then
echo $1"/"$file
top_label $1"/"$file $2 $3
fi
fi
done
}
read_dir $1 $2 $3

View File

@@ -0,0 +1,52 @@
#!/usr/bin/python3.7
"""Prints the top N labels given a label file and network output (float32 array)
"""
import argparse
import os
import sys
import numpy as np
def parse_args():
"""Parse input arguments."""
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument('-l', '--labels', dest='labels_path', required=True,
help='Path to the labels file')
parser.add_argument('-n', '--net-out', dest='net_out', required=True,
help='Path to the network output file (raw float32 array)')
parser.add_argument('-N', '--n-top', dest='n_top', type=int, default=5,
help='N top labels to be printed. Defaults to 5')
parser.add_argument('-d', '--delimiter', default='\t',
help='The delimiter for the labels columns. Defaults to "\\t"')
args = parser.parse_args()
if (not os.path.exists(args.labels_path) or not os.path.isfile(args.labels_path)):
print("Invalid labels file: {}".format(args.labels_path))
sys.exit(1)
if (not os.path.exists(args.net_out) or not os.path.isfile(args.net_out)):
print("Invalid network output file: {}".format(args.net_out))
sys.exit(1)
return args
if __name__ == '__main__':
args = parse_args()
labels = np.loadtxt(args.labels_path, str, delimiter=args.delimiter)
name,ext = os.path.splitext(args.net_out)
if (ext == '.out'):
net_out = np.fromfile(args.net_out, dtype='float32')
elif (ext == '.txt'):
net_out = np.loadtxt(args.net_out, dtype='float32')
net_out = np.insert(net_out, 0, 0.0) # // insert backgroup as the first item in labels
else:
print("unsupport file format of net_out")
sys.exit(0)
top_inds = net_out.argsort()[::-1][:args.n_top]
print("Top {} class(es):".format(len(top_inds)))
for each in zip(top_inds, net_out[top_inds], labels[top_inds]):
print("{}".format(str(each)), end='')
print("", end='\n')

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,10 @@
0
1
2
3
4
5
6
7
8
9

View File

@@ -0,0 +1,2 @@
оџПоџПоџПоџПоџПоџПоџПоџПЯї{ПaП_ПоџПоџП<7F>ЯgП пoПоџППяwПоџПоџПЏчsП3ЇSППяwПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџП пoПоџПоџПоџП пoПоџПоџПRЗ<>ЯgПоџПоџПоџП<7F>зkП<6B>зkПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџПЏчsП<73>ЯgПоџПBЏWПоџП<7F>ЯgПоџПоџПоџПЯї{ПоџПоџПЯї{ПоџПоџПЏчsПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџП пoПоџПоџПоџПоџПоџПоџПBЏWПоџПоџПоџПЏчsП3ЇSПоџПоџПqЧcПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџПqЧcП<04>GППяwП пoП пoПЯї{ПоџП<13>KПЯї{ПоџПоџП<7F>зkПЏчsПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџП3ЇSПоџПоџП<13>гљќ?гѕ:@йxМ?Яї{ПоџПоџП<7F>ЯgППяwПоџПоџПqЧcПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџПaП_П<04>GП?ЉA@Ќхђ?"<1A>ОЖf3ПоџП<7F>зkПє<D09F>оџПоџПaП_ПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџП<7F>ЯgПоџПоџПоџП$<24>
@пћ=@лљ<@к§ў?=(<28>?х~?ПоџПqЧcППяwПоџПqЧcПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџППяwПоџП(<28>@гѕ:@зї;@зї;@Яѓ9@ПяwП пoП<6F>зkПRЗоџПqЧcПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџППяwПоџП(<28>@гѕ:@зї;@зї;@чџ?@оџПоџПоџПоџПоџП<04>оџПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџППяwПоџП(<28>@гѕ:@зї;@зї;@ыA@ПяwП<04>GПЏчsПоџПоџПЏчsПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџППяwПоџП(<28>@гѕ:@зї;@зї;@Дх2@оџПRЗ пoПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџППяwПоџП(<28>@гѕ:@зї;@зї;@ыA@<40>зkПоџПоџПоџП<7F>ЯgПоџПЯї{ПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџППяwПоџП(<28>@гѕ:@зї;@зї;@<05>@BЏWПоџПЏчsПЏчsПЯї{ПоџПЯї{ПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџППяwПоџП(<28>@гѕ:@зї;@зї;@ь<>СМоџПоџПЯї{ПоџПоџПЯї{ПqЧcПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџПоџППяwПоџП(<28>@гѕ:@зї;@зї;@

View File

@@ -0,0 +1,10 @@
{
"bvnc" : [ 28, 4, 6400, 1502 ],
"clock_frequency" : 1000000000,
"conv_data_unsign" : 1,
"hw_params" : "ed9ba9beb3b4fabdfaf6c9fde4f9ec93c9e2e8e8f6c9e8abe0e2f3b3aba0adcfba9ba9beb3b4fab1ebe2f9f8efc5ef96e2cee8fdf0e3e9befbf5b4b1b1babcd39cb1a9beb1f4e9b1fcb2b6ababc1adc9afa8b0afbfb6acefbfa2a0bdabadbdcfa4a1a5bea4a6aaefbab0cbbd81baaddfb4f3f0eaf6e5c4afeae2c9f2f2f9e19ab4b1b3bea0a4b7d5afb0b6b3e8f5e899f0ceebebf5f0feadd0f2f7ffe0e9afdfacb1b8a8bf9cbbffafb2f5feeefceba0f4e4eff8f6e4c4bdf6e4f3e2a9bab7dfa7a2b8aea4a4b7d5afb0b6b3e8f5e899f0ceeff1e1fbfaabadb0acb1b9b687dfb6b1abfdfcf8ed80edfcf9f2e0e9afdfacb1b1b299b6bbffadf3f9fffdc5fcc7f7cef9fbe1c9f8b7eefef8f4e7b8adc5b6a0a594b3b6bbfdecfff8e7d4ede49be2f9abbea9b6aaedb7bc9cb1abbaaf9ae1fed6fce1f9fabbecf1e5e5e2f4eaddb6aba9afbf9cbbffafb2f3e9ffc5e09afbceebebe0c9ecb6ebe4feb3aba0adcda3a7a594b3b6bbfde6fee6e4ffc5ef8af0f7ececccf4fab1e4cff7f5efe8e88ce5f4fabcb3acbbeabea2ba9babbaadddfffff9ebe7c9f9aae9f6f3e3d4f8ec91fde2abbea9b6aae9a39ab6b1abb8e491e6e4fdc1f1e3fdb9eae2c9e6e2fef997b4b1b3bea5a2b7d5afb0b6b3e2f4f9a0fbf4e4c1f1e3e880f8f9f2e5e3b8adc5b6a3bca8bf9cbbffafb2fbf0f3c5ee90f8e7d6f1e6e2c4b1fafdc9e1e7fbe39ae5b3a9a4b3a2abe6b9bc9cb1abbaaf92f7e9d6fdfcf8ed80f8f9f8f5e4edd297f3f8eef6e7b4bbe5afa2a3a7a790addfb6b3e4ffebc9f8b0e1e6c9e6e2f4e990e1cefef7f7e2f3fdafaab6a3beaca1f5b6b1a9bcfef7e380e9f9fae5eee8d28cf3e5abbea9b6aaedb7bc9cb1abbaaf92f7e9d6f8fafaefbafde3c9e6e2eee5a0f4f8e8edb1b6a1ffbaa1a4bd81baaddfb4fcecf3ccf4eeadfce4c9f3f2eee88cb4b1b3bea2a4a3f385b0b6b1a9f7e892f9e3f0c1fef7f5b6ffe5faf0fff3e291b4b1b3bea2ba91ffafb0b4fceef7e28defcee4fffdffebaae3f1e2f8e4f4d29de3f7effbe1c9f9bee1fbe5b3aba0adcca4bd83beb3b6b9b2eafdf9e3f2c5e09ef8f8f9ebfff7efb6e0fec9f3fefceb9ae4cefaf7e9f3b9ffb5b0a5a3a790addfb6b3e4fbfef9e9a6d0fdf7ffe2eaf893f7e5e0f1fdc9ebbefdf1fafdeef6e48cfbcee5aeb1b6a1ffbea6ba9babbaadddfbf4e4f1e1efc4b2eefeffe1fef6ec8bfffee7c1e3f7e9bee3fcf3fde2e9e0a0faa0abbea9b6aff385b0b6b1a9f7e491c9e1e6f1ffb4bbe5afa1ba9babbaadddfbf8fbecfce4c4afeef4f2f8e5fdafdfacb1b8b299b6bbffadfdfbe4d4ece88db4b1b3bea0ba91ffafb0b4ffe4e8e0a0e3ffe0eae0b4bbe5afa1ba9babbaadddf8e4e4c1e1f3fabbd0f9f2b3aba0adc9a2bd83beb3b6b9b1fafdc9e6f9f3f99ac9f8edbcb3acbbe9bbbc9cb1abbaaf90ffffd6edfaf8fcb3eacfe6fdeaf4e8a0f1e3e8f0e6fafaade6e4efb3aba0adcbba9ba9beb3b4ebb0e0fcc9e4e5f3f98cb4b1b3bea2a0b7d5afb0b6b3f8f2ec8df3f5d6fce6f0fdbafdcff4f0e5f1d29ef2f5fbfbe0e5feacadb0acb1baa8b5d39cb1a9beb1e5f3befdf5f2cee9efeb99f3e3d6fcf2f8f0acadb0acb1b3b687dfb6b1abedfbf7e9baebcff4e4edfce88dc9e6e0fae7feb9ffb5b0a4a4bd90f0f5",
"mem_efficiency" : 0.40000000000000002,
"onchip_mem_page_size" : 4096,
"onchip_mem_size" : 1572864,
"sbuf_data_unsign" : 1
}

View File

@@ -0,0 +1,39 @@
{
"backend_bitdepth": 8,
"output": {
"bits": 32,
"float": true
},
"callback": {
"bits": 32,
"float": true
},
"memory": {
"bits": 8
},
"input": {
"bits": 32,
"float": true
},
"intern_bitdepth": 8,
"layer_types": [
{
"type":"CONV",
"weights": {
"bits":8
},
"bias": {
"bits":8
}
},
{
"type":"INNERPRODUCT",
"weights": {
"bits":8
},
"bias": {
"bits":8
}
}
]
}

View File

@@ -0,0 +1,74 @@
IMGDNN001007
{
"nodes": [
{
"op": "null",
"name": "data",
"attrs": {
"dtype": "0",
"shape": "(1, 3, 224, 224)"
},
"inputs": []
},
{
"op": "null",
"name": "conv1/weights",
"attrs": {
"dtype": "0",
"shape": "(32, 3, 3, 3)"
},
"inputs": []
},
{
"op": "null",
"name": "conv1_bias_IMG_0",
"attrs": {
"dtype": "0",
"shape": "(32,)"
},
"inputs": []
},
{
"op": "conv2d",
"name": "conv1_bn_IMG_1_bn_IMG_2",
"attrs": {
"channels": "32",
"dilation": "[1, 1]",
"groups": "1",
"kernel_layout": "OIHW",
"kernel_size": "[3, 3]",
"layout": "NCHW",
"out_layout": "NCHW",
"padding": "[1, 1]",
"strides": "[2, 2]",
"use_bias": "True"
},
"inputs": [[0, 0, 0], [1, 0, 0], [2, 0, 0]]
},
{
"op": "relu",
"name": "relu1",
"inputs": [[3, 0, 0]]
}
],
"arg_nodes": [0, 1, 2],
"node_row_ptr": [0, 1, 2, 3, 4, 5],
"heads": [[4, 0, 0]],
"attrs": {
"bitdepth": ["list_int", [16, 16, 16, 16, 16]],
"index": ["list_int", [0, 1, 2, 3, 4]],
"max": ["list_float", [1.18430805, 0.381684601, 0.764594197, 1.10629439, 1.10629439]],
"min": ["list_float", [-0.957618475, -0.295405209, -0.286804408, -0.714327574, 0]],
"name": ["list_str", [
"data",
"conv1/weights",
"conv1_bias_IMG_0",
"conv1_bn_IMG_1_bn_IMG_2",
"relu1"]],
"network_bitdepth": ["list_int", [32, 32, 32, 32, 32]],
"wo_exponent": ["list_int", [-14, -16, -15, -14, -14]],
"wo_gamma": ["list_float", [20]],
"wo_max": ["list_float", [1.99993896, 0.499984741, 0.999969482, 1.99993896, 1.99993896]],
"wo_min": ["list_float", [-2, -0.5, -1, -2, -2]]
}
}

View File

@@ -0,0 +1,71 @@
#!/bin/sh
BASE_PATH=.
TEST_PATH=${BASE_PATH}
RES_PATH=${TEST_PATH}/resource/cnn_testbench
OUT_PATH=${TEST_PATH}/out/cnn
#export LD_LIBRARY_PATH=${BASE_PATH}/lib/:$LD_LIBRARY_PATH
REPEAT_COUNT=1
TIMEOUT=2000 # // 2000ms
TASK_COUNT=1
MODEL=lenet
OCM_SIZE=OCM_1M5
TOP_NUM=0
VERBOSE=0
while getopts ":r:t:m:o:p:v:" opt
do
case $opt in
r)
REPEAT_COUNT=$OPTARG
;;
t)
TIMEOUT=$OPTARG
;;
m)
MODEL=$OPTARG
;;
o)
OCM_SIZE=$OPTARG
;;
p)
TOP_NUM=$OPTARG
;;
v)
VERBOSE=$OPTARG
;;
?)
echo "unsupport parameter!!!"
exit 1;;
esac
done
echo "MODEL="${MODEL}, "OCM="${OCM_SIZE}, "REPEAT_COUNT="${REPEAT_COUNT}
rm -rf ${OUT_PATH}/${MODEL}/${OCM_SIZE}; mkdir -p ${OUT_PATH}/${MODEL}/${OCM_SIZE}
if [ "${VERBOSE}" == "1" ]; then
echo "Usage: ./run_cnn_testbench.sh [-m model_name] [-r repeat_cnt]"
${TEST_PATH}/cnn_testbench --unpacked_in --unpacked_out \
-m ${RES_PATH}/${MODEL}/${OCM_SIZE}/model.mbs.bin \
-o ${OUT_PATH}/${MODEL}/${OCM_SIZE} \
-t ${TIMEOUT} \
--repeat_count ${REPEAT_COUNT} \
--task_count ${TASK_COUNT} \
${RES_PATH}/${MODEL}/m1.tensor.bin
else
${TEST_PATH}/cnn_testbench --unpacked_in --unpacked_out \
-m ${RES_PATH}/${MODEL}/${OCM_SIZE}/model.mbs.bin \
-o ${OUT_PATH}/${MODEL}/${OCM_SIZE} \
-t ${TIMEOUT} \
--repeat_count ${REPEAT_COUNT} \
--task_count ${TASK_COUNT} \
${RES_PATH}/${MODEL}/m1.tensor.bin > test.log
fi
if [ "${TOP_NUM}" != "0" ]; then
${TEST_PATH}/bin/print_top_label.sh \
${OUT_PATH}/${MODEL}/${OCM_SIZE} \
${RES_PATH}/${MODEL}/label.txt \
${TOP_NUM}
fi

View File

@@ -0,0 +1,18 @@
#!/bin/sh
BASE_PATH=.
TEST_PATH=${BASE_PATH}
RES_PATH=${TEST_PATH}/resource/nnvm_testbench
OUT_PATH=${TET_PATH}/out/nnvm
#export LD_LIBRARY_PATH=${BASE_PATH}/lib/:$LD_LIBRARY_PATH
rm -rf ${OUT_PATH}; mkdir -p ${OUT_PATH}
${TEST_PATH}/nnvm_testbench \
-i data \
-d data:${RES_PATH}/m1.tensor.bin \
-o relu1 \
-m ${RES_PATH}/light_mapconfig.json \
-c ${RES_PATH}/light_hw_config.json \
-n ${RES_PATH}/m1_hist.imgir \
-p ${RES_PATH}/m1_hist.imgir.params
mv ./output_* ${OUT_PATH}/

5
debian/changelog vendored Normal file
View File

@@ -0,0 +1,5 @@
th1520-npu (1.5.4) unstable; urgency=medium
* Sync sdk 1.5.4 nna
-- Han Gao <gaohan@iscas.ac.cn> Wed, 08 May 2024 18:29:08 +0800

13
debian/control vendored Normal file
View File

@@ -0,0 +1,13 @@
Source: th1520-npu
Section: misc
Priority: optional
Maintainer: Han Gao <gaohan@iscas.ac.cn>
Build-Depends: debhelper-compat (= 13)
Standards-Version: 4.6.1
Rules-Requires-Root: no
Package: th1520-npu
Architecture: riscv64
Multi-Arch: foreign
Depends: ${misc:Depends}
Description: th1520 npu addons of the RevyOS

1
debian/copyright vendored Normal file
View File

@@ -0,0 +1 @@
This is Revyos th1520 npu addons files

14
debian/rules vendored Executable file
View File

@@ -0,0 +1,14 @@
#!/usr/bin/make -f
export DH_VERBOSE = 1
export DESTDIR = debian/th1520-npu
export DEB_BUILD_OPTIONS += nostrip
%:
dh $@
override_dh_install:
mkdir -p $(CURDIR)/$(DESTDIR)$(PREFIX)/
cp -avpr $(CURDIR)/addons/* $(CURDIR)/$(DESTDIR)$(PREFIX)/
override_dh_clean:
echo "None"

1
debian/source/format vendored Normal file
View File

@@ -0,0 +1 @@
3.0 (native)

1
debian/source/options vendored Normal file
View File

@@ -0,0 +1 @@
tar-ignore = "-I.a"

35
debian/th1520-npu.install vendored Normal file
View File

@@ -0,0 +1,35 @@
./usr
./usr/lib
./usr/lib/riscv64-linux-gnu
./usr/lib/riscv64-linux-gnu/libimgdnn.so
./usr/lib/riscv64-linux-gnu/libimgcustom.so
./usr/lib/riscv64-linux-gnu/libPVRScopeServicesNNA.so
./usr/lib/riscv64-linux-gnu/libnnahelper.so
./usr/lib/riscv64-linux-gnu/libnnasession.so
./usr/lib/riscv64-linux-gnu/libimgdnn_execute.so
./usr/share
./usr/share/npu
./usr/share/npu/rmmod.sh
./usr/share/npu/test
./usr/share/npu/test/run_nnvm_testbench.sh
./usr/share/npu/test/resource
./usr/share/npu/test/resource/cnn_testbench
./usr/share/npu/test/resource/cnn_testbench/lenet
./usr/share/npu/test/resource/cnn_testbench/lenet/label.txt
./usr/share/npu/test/resource/cnn_testbench/lenet/OCM_1M5
./usr/share/npu/test/resource/cnn_testbench/lenet/OCM_1M5/model.mbs.bin
./usr/share/npu/test/resource/cnn_testbench/lenet/m1.tensor.bin
./usr/share/npu/test/resource/nnvm_testbench
./usr/share/npu/test/resource/nnvm_testbench/m1_hist.imgir
./usr/share/npu/test/resource/nnvm_testbench/m1_hist.imgir.params
./usr/share/npu/test/resource/nnvm_testbench/light_mapconfig.json
./usr/share/npu/test/resource/nnvm_testbench/light_hw_config.json
./usr/share/npu/test/resource/nnvm_testbench/m1.tensor.bin
./usr/share/npu/test/bin
./usr/share/npu/test/bin/print_top_labels.py
./usr/share/npu/test/bin/print_top_label.sh
./usr/share/npu/test/lstm_testbench
./usr/share/npu/test/run_cnn_testbench.sh
./usr/share/npu/test/cnn_testbench
./usr/share/npu/test/nnvm_testbench
./usr/share/npu/insmod.sh