Skip to content

Commit

Permalink
Update Sample Code, setup 2 QNN SDK together.
Browse files Browse the repository at this point in the history
  • Loading branch information
quic-zhanweiw committed Feb 6, 2025
1 parent a75f9bf commit ca197ff
Show file tree
Hide file tree
Showing 15 changed files with 76 additions and 53 deletions.
6 changes: 1 addition & 5 deletions samples/python/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,11 +31,7 @@ cd ai-engine-direct-helper\samples\python
### Step 4: Setup QAI AppBuilder Python Environment:
Run below commands in Windows terminal:
```
python setup.py --qnn-sdk-version <version of QNN SDK>
```
Where `<version of QNN SDK>` is the version of QNN SDK you want to use. For example, if you want to use QNN SDK 2.24.0, you can run:
```
python setup.py --qnn-sdk-version 2.24
python setup.py
```

### Step 5: Run Model:
Expand Down
1 change: 1 addition & 0 deletions samples/python/aotgan/aotgan.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
sys.path.append(".")
sys.path.append("..")
import utils.install as install
install.install_qai_appbuilder("2.28")
import numpy as np
import torch
import torchvision.transforms as transforms
Expand Down
1 change: 1 addition & 0 deletions samples/python/fastsam_x/fastsam_x.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
sys.path.append(".")
sys.path.append("..")
import utils.install as install
install.install_qai_appbuilder("2.28")
import numpy as np
import math
import torch
Expand Down
1 change: 1 addition & 0 deletions samples/python/inception_v3/inception_v3.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
sys.path.append(".")
sys.path.append("..")
import utils.install as install
install.install_qai_appbuilder("2.28")
import cv2
import numpy as np
import torch
Expand Down
1 change: 1 addition & 0 deletions samples/python/lama_dilated/lama_dilated.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
sys.path.append(".")
sys.path.append("..")
import utils.install as install
install.install_qai_appbuilder("2.28")
import numpy as np
import torch
import torchvision.transforms as transforms
Expand Down
1 change: 1 addition & 0 deletions samples/python/openpose/openpose.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
sys.path.append(".")
sys.path.append("..")
import utils.install as install
install.install_qai_appbuilder("2.28")
import numpy as np
import math
from PIL import Image, ImageDraw
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
sys.path.append(".")
sys.path.append("..")
import utils.install as install
install.install_qai_appbuilder("2.28")
import cv2
import numpy as np
import torch
Expand Down
1 change: 1 addition & 0 deletions samples/python/real_esrgan_x4plus/real_esrgan_x4plus.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
sys.path.append(".")
sys.path.append("..")
import utils.install as install
install.install_qai_appbuilder("2.28")
import cv2
import numpy as np
import torch
Expand Down
3 changes: 2 additions & 1 deletion samples/python/riffusion/Riffusion.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
os.environ['HF_HUB_DISABLE_SYMLINKS_WARNING'] = "1" # Disable 'cache-system uses symlinks' warning.
os.environ['HF_ENDPOINT'] = "https://hf-api.gitee.com"
import utils.install as install
install.install_qai_appbuilder("2.24")
import time
from PIL import Image
import shutil
Expand Down Expand Up @@ -45,7 +46,7 @@
####################################################################

execution_ws = os.getcwd()
qnn_dir = execution_ws + "\\qai_libs"
qnn_dir = execution_ws + "\\qai_libs_2.24"

if not MODEL_NAME in execution_ws:
execution_ws = execution_ws + "\\" + MODEL_NAME
Expand Down
23 changes: 17 additions & 6 deletions samples/python/setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,13 @@

if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("--qnn-sdk-version", default="2.24", type=str)
parser.add_argument("--lib-version", default="arm64x-windows-msvc", type=str)
parser.add_argument("--qnn-sdk-version", default="both", type=str)
parser.add_argument("--lib-arch", default="arm64x-windows-msvc", type=str)
parser.add_argument("--dsp-arch", default=73, type=int)
args = parser.parse_args()

qnn_sdk_version = args.qnn_sdk_version
lib_version = args.lib_version
lib_arch = args.lib_arch
dsp_arch = args.dsp_arch

start_number = 140
Expand All @@ -26,9 +26,20 @@

try:
install.install_tools()
install.install_qai_sdk(qnn_sdk_version)
install.install_qai_appbuilder(qnn_sdk_version, lib_version)
install.setup_qai_env(qnn_sdk_version, lib_version, dsp_arch)

if qnn_sdk_version == "both":
qnn_sdk_version = "2.28"
install.install_qai_sdk(qnn_sdk_version)
install.setup_qai_env(qnn_sdk_version, lib_arch, dsp_arch, "qai_libs")

qnn_sdk_version = "2.24"
install.install_qai_sdk(qnn_sdk_version)
install.setup_qai_env(qnn_sdk_version, lib_arch, dsp_arch, "qai_libs_2.24")

else:
install.install_qai_sdk(qnn_sdk_version)
install.install_qai_appbuilder(qnn_sdk_version)
install.setup_qai_env(qnn_sdk_version, lib_arch, dsp_arch, "qai_libs")

print()
print(start_number * "*")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
os.environ['HF_HUB_DISABLE_SYMLINKS_WARNING'] = "1" # Disable 'cache-system uses symlinks' warning.
os.environ['HF_ENDPOINT'] = "https://hf-api.gitee.com"
import utils.install as install
install.install_qai_appbuilder("2.24")
import time
from PIL import Image
import shutil
Expand Down Expand Up @@ -49,7 +50,7 @@
if not "python" in execution_ws:
execution_ws = execution_ws + "\\..\\" + "python"

qnn_dir = execution_ws + "\\qai_libs"
qnn_dir = execution_ws + "\\qai_libs_2.24"

if not MODEL_NAME in execution_ws:
execution_ws = execution_ws + "\\" + MODEL_NAME
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
os.environ['HF_HUB_DISABLE_SYMLINKS_WARNING'] = "1" # Disable 'cache-system uses symlinks' warning.
os.environ['HF_ENDPOINT'] = "https://hf-api.gitee.com"
import utils.install as install
install.install_qai_appbuilder("2.24")
import time
from PIL import Image
import shutil
Expand Down Expand Up @@ -49,7 +50,7 @@
if not "python" in execution_ws:
execution_ws = execution_ws + "\\..\\" + "python"

qnn_dir = execution_ws + "\\qai_libs"
qnn_dir = execution_ws + "\\qai_libs_2.24"

if not MODEL_NAME in execution_ws:
execution_ws = execution_ws + "\\" + MODEL_NAME
Expand Down
1 change: 1 addition & 0 deletions samples/python/unet_segmentation/unet_segmentation.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
sys.path.append(".")
sys.path.append("..")
import utils.install as install
install.install_qai_appbuilder("2.28")
import numpy as np
import math
from PIL import Image
Expand Down
82 changes: 43 additions & 39 deletions samples/python/utils/install.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
# ---------------------------------------------------------------------
import os
import sys
import platform
import subprocess
import zipfile
import requests
Expand All @@ -17,13 +18,11 @@

qnn_sdk_version = {
"2.24": "2.24.0.240626",
"2.26": "2.26.0.240828",
"2.28": "2.28.0.241029",
}

DEFAULT_DSP_ARCH = "73" # For X-Elite device.
DEFAULT_LIB_VERSION = "arm64x-windows-msvc" # "aarch64-windows-msvc" # For X-Elite device.
QNN_LIBS_DIR = "qai_libs"
DEFAULT_LIB_ARCH = "arm64x-windows-msvc" # "aarch64-windows-msvc" # For X-Elite device.

QNN_SDK_URL = "https://softwarecenter.qualcomm.com/api/download/software/qualcomm_neural_processing_sdk/"
QAI_APPBUILDER_WHEEL = "https://github.com/quic/ai-engine-direct-helper/releases/download/vversion.0/qai_appbuilder-version.0-cp312-cp312-win_amd64.whl"
Expand Down Expand Up @@ -309,39 +308,6 @@ def run_uninstall_pip(command, desc=None, live=False):
return run(f'"{python}" -m pip {command} ', desc=f"Uninstalling {desc}", errdesc=f"Couldn't install {desc}", live=live)


def setup_qai_env(version, lib_version = DEFAULT_LIB_VERSION, dsp_arch = DEFAULT_DSP_ARCH,):
if version in qnn_sdk_version:
full_version = qnn_sdk_version[version]
qnn_root_path = QNN_SDK_ROOT + full_version

SDK_lib_dir = qnn_root_path + "\\lib\\" + lib_version
SDK_hexagon_dir = qnn_root_path + "\\lib\\hexagon-v{}\\unsigned".format(dsp_arch)

os.makedirs(QNN_LIBS_DIR, exist_ok=True)

libs = [
"QnnHtp.dll",
"QnnSystem.dll",
"QnnHtpPrepare.dll",
"QnnHtpV{}Stub.dll".format(dsp_arch),
]

hexagon_libs = [
"libQnnHtpV{}Skel.so".format(dsp_arch),
"libqnnhtpv73.cat",
]

for lib in libs:
if os.path.isfile(os.path.join(QNN_LIBS_DIR, lib)):
os.remove(os.path.join(QNN_LIBS_DIR, lib))
shutil.copy(os.path.join(SDK_lib_dir, lib), QNN_LIBS_DIR)

for lib in hexagon_libs:
if os.path.isfile(os.path.join(QNN_LIBS_DIR, lib)):
os.remove(os.path.join(QNN_LIBS_DIR, lib))
shutil.copy(os.path.join(SDK_hexagon_dir, lib), QNN_LIBS_DIR)


def install_tools():
tool_path = "tools"
wget_path = tool_path + "\\wget"
Expand Down Expand Up @@ -375,6 +341,39 @@ def install_clean(directory, zip_name):
print(f"Deleted file: {filepath}")


def setup_qai_env(version, lib_arch = DEFAULT_LIB_ARCH, dsp_arch = DEFAULT_DSP_ARCH, qnn_libs_dir="qai_libs"):
if version in qnn_sdk_version:
full_version = qnn_sdk_version[version]
qnn_root_path = QNN_SDK_ROOT + full_version

SDK_lib_dir = qnn_root_path + "\\lib\\" + lib_arch
SDK_hexagon_dir = qnn_root_path + "\\lib\\hexagon-v{}\\unsigned".format(dsp_arch)

os.makedirs(qnn_libs_dir, exist_ok=True)

libs = [
"QnnHtp.dll",
"QnnSystem.dll",
"QnnHtpPrepare.dll",
"QnnHtpV{}Stub.dll".format(dsp_arch),
]

hexagon_libs = [
"libQnnHtpV{}Skel.so".format(dsp_arch),
"libqnnhtpv73.cat",
]

for lib in libs:
if os.path.isfile(os.path.join(qnn_libs_dir, lib)):
os.remove(os.path.join(qnn_libs_dir, lib))
shutil.copy(os.path.join(SDK_lib_dir, lib), qnn_libs_dir)

for lib in hexagon_libs:
if os.path.isfile(os.path.join(qnn_libs_dir, lib)):
os.remove(os.path.join(qnn_libs_dir, lib))
shutil.copy(os.path.join(SDK_hexagon_dir, lib), qnn_libs_dir)


def install_qai_sdk(version):
if version in qnn_sdk_version:
full_version = qnn_sdk_version[version]
Expand Down Expand Up @@ -423,10 +422,16 @@ def install_qai_sdk(version):
return None


def install_qai_appbuilder(version, lib_version):
def install_qai_appbuilder(version):
lib_arch = "aarch64-windows-msvc"
machine = platform.machine()
sysinfo = sys.version
if machine == "AMD64" or "AMD64" in sysinfo:
lib_arch = DEFAULT_LIB_ARCH

if version in qnn_sdk_version:
qai_appbuilder_wheel = QAI_APPBUILDER_WHEEL.replace("version", version)
if lib_version == "aarch64-windows-msvc":
if lib_arch == "aarch64-windows-msvc":
qai_appbuilder_wheel = qai_appbuilder_wheel.replace("win_amd64", "win_arm64")

dist = is_installed("qai_appbuilder")
Expand All @@ -437,4 +442,3 @@ def install_qai_appbuilder(version, lib_version):

if (not dist) or (dist.version != version_install) :
run_pip(f"install {qai_appbuilder_wheel}", "QAI AppBuilder " + version_install)

1 change: 1 addition & 0 deletions samples/python/yolov8_det/yolov8_det.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
sys.path.append(".")
sys.path.append("..")
import utils.install as install
install.install_qai_appbuilder("2.28")
import cv2
import numpy as np
import torch
Expand Down

0 comments on commit ca197ff

Please sign in to comment.