mirror of
https://github.com/saymrwulf/onnxruntime.git
synced 2026-07-03 03:58:54 +00:00
[QNN EP] Build x64 python wheel for QNN EP (#19499)
### Description Adds a job to the python packaging pipeline that builds x64 python wheels for QNN EP. ### Motivation and Context Necessary to create a cached QNN model on Windows x64, which is done by creating a properly configured onnxruntime session with QNN EP.
This commit is contained in:
parent
61e07a46e1
commit
4dfba53bfb
3 changed files with 194 additions and 0 deletions
|
|
@ -34,6 +34,11 @@ parameters:
|
|||
type: boolean
|
||||
default: true
|
||||
|
||||
- name: enable_windows_x64_qnn
|
||||
displayName: 'Whether Windows x86_64 package with QNN EP is built.'
|
||||
type: boolean
|
||||
default: true
|
||||
|
||||
- name: build_py_parameters
|
||||
displayName: 'Specify extra build parameters'
|
||||
type: string
|
||||
|
|
@ -70,5 +75,6 @@ stages:
|
|||
enable_mac_cpu: ${{ parameters.enable_mac_cpu }}
|
||||
enable_linux_arm: ${{ parameters.enable_linux_arm }}
|
||||
enable_windows_arm64_qnn: ${{ parameters.enable_windows_arm64_qnn }}
|
||||
enable_windows_x64_qnn: ${{ parameters.enable_windows_x64_qnn }}
|
||||
build_py_parameters: ${{ parameters.build_py_parameters }}
|
||||
cmake_build_type: ${{ parameters.cmake_build_type }}
|
||||
|
|
|
|||
|
|
@ -40,6 +40,11 @@ parameters:
|
|||
type: boolean
|
||||
default: true
|
||||
|
||||
- name: enable_windows_x64_qnn
|
||||
displayName: 'Whether Windows x86_64 package with QNN EP is built.'
|
||||
type: boolean
|
||||
default: true
|
||||
|
||||
# TODO: Now the Windows jobs use a different cmake build type. Consider to merge it.
|
||||
- name: cmake_build_type
|
||||
type: string
|
||||
|
|
@ -459,3 +464,9 @@ stages:
|
|||
QNN_SDK: 'qnn-v2.18.0.240101_win'
|
||||
PYTHON_VERSION: '3.11'
|
||||
NUMPY_VERSION: '1.25.2'
|
||||
|
||||
- ${{ if eq(parameters.enable_windows_x64_qnn, true) }}:
|
||||
- template: py-win-x64-qnn.yml
|
||||
parameters:
|
||||
MACHINE_POOL: 'Onnxruntime-QNNEP-Windows-2022-CPU'
|
||||
QNN_SDK: 'qnn-v2.18.0.240101_win'
|
||||
|
|
|
|||
|
|
@ -0,0 +1,177 @@
|
|||
parameters:
|
||||
|
||||
- name: MACHINE_POOL
|
||||
type: string
|
||||
default: 'Onnxruntime-QNNEP-Windows-2022-CPU'
|
||||
|
||||
- name: QNN_SDK
|
||||
displayName: QNN Windows SDK path
|
||||
type: string
|
||||
default: qnn-v2.18.0.240101_win
|
||||
|
||||
- name: ENV_SETUP_SCRIPT
|
||||
type: string
|
||||
default: ''
|
||||
|
||||
- name: BUILD_PY_PARAMETERS
|
||||
displayName: >
|
||||
Extra parameters to pass to build.py. Don't put newlines in here.
|
||||
type: string
|
||||
default: ''
|
||||
|
||||
jobs:
|
||||
- job: Win_py_x64_qnn_Wheels
|
||||
timeoutInMinutes: 210
|
||||
workspace:
|
||||
clean: all
|
||||
pool:
|
||||
name: ${{ parameters.MACHINE_POOL }}
|
||||
strategy:
|
||||
matrix:
|
||||
Python38_x64:
|
||||
PythonVersion: '3.8'
|
||||
Python39_x64:
|
||||
PythonVersion: '3.9'
|
||||
Python310_x64:
|
||||
PythonVersion: '3.10'
|
||||
Python311_x64:
|
||||
PythonVersion: '3.11'
|
||||
Python312_x64:
|
||||
PythonVersion: '3.12'
|
||||
variables:
|
||||
GRADLE_OPTS: '-Dorg.gradle.daemon=false'
|
||||
VSGenerator: 'Visual Studio 17 2022'
|
||||
QNN_SDK_ROOTDIR: 'C:\data\qnnsdk\${{parameters.QNN_SDK}}'
|
||||
steps:
|
||||
- checkout: self
|
||||
clean: true
|
||||
submodules: recursive
|
||||
|
||||
- template: telemetry-steps.yml
|
||||
|
||||
- script: |
|
||||
DIR C:\data\qnnsdk
|
||||
displayName: Check available QNN SDKs
|
||||
|
||||
- task: UsePythonVersion@0
|
||||
inputs:
|
||||
versionSpec: $(PythonVersion)
|
||||
addToPath: true
|
||||
architecture: 'x64'
|
||||
|
||||
- task: onebranch.pipeline.tsaoptions@1
|
||||
displayName: 'OneBranch TSAOptions'
|
||||
inputs:
|
||||
tsaConfigFilePath: '$(Build.SourcesDirectory)\.config\tsaoptions.json'
|
||||
appendSourceBranchName: false
|
||||
|
||||
- task: PythonScript@0
|
||||
inputs:
|
||||
scriptSource: inline
|
||||
script: |
|
||||
import sys
|
||||
np_version = 'numpy==1.21.6' if sys.version_info < (3, 11) else 'numpy==1.24.2'
|
||||
import subprocess
|
||||
subprocess.call(['pip', 'install', '-q', 'setuptools', 'wheel', np_version])
|
||||
workingDirectory: '$(Build.BinariesDirectory)'
|
||||
displayName: 'Install python modules'
|
||||
|
||||
- template: download-deps.yml
|
||||
|
||||
- task: PythonScript@0
|
||||
displayName: 'Update deps.txt'
|
||||
inputs:
|
||||
scriptPath: $(Build.SourcesDirectory)/tools/ci_build/replace_urls_in_deps.py
|
||||
arguments: --new_dir $(Build.BinariesDirectory)/deps
|
||||
workingDirectory: $(Build.BinariesDirectory)
|
||||
|
||||
- task: PowerShell@2
|
||||
displayName: 'Install ONNX'
|
||||
inputs:
|
||||
filePath: '$(Build.SourcesDirectory)/tools/ci_build/github/windows/install_third_party_deps.ps1'
|
||||
workingDirectory: '$(Build.BinariesDirectory)'
|
||||
arguments: -cpu_arch x64 -install_prefix $(Build.BinariesDirectory)\RelWithDebInfo\installed -build_config RelWithDebInfo
|
||||
|
||||
- template: set-nightly-build-option-variable-step.yml
|
||||
|
||||
- task: PythonScript@0
|
||||
displayName: 'Generate cmake config'
|
||||
inputs:
|
||||
scriptPath: '$(Build.SourcesDirectory)\tools\ci_build\build.py'
|
||||
arguments: >
|
||||
--config RelWithDebInfo
|
||||
--build_dir $(Build.BinariesDirectory)
|
||||
--skip_submodule_sync
|
||||
--cmake_generator "$(VSGenerator)"
|
||||
--use_qnn
|
||||
--qnn_home $(QNN_SDK_ROOTDIR)
|
||||
--enable_pybind
|
||||
--parallel --update
|
||||
$(TelemetryOption) ${{ parameters.BUILD_PY_PARAMETERS }}
|
||||
workingDirectory: '$(Build.BinariesDirectory)'
|
||||
|
||||
- task: VSBuild@1
|
||||
displayName: 'Build'
|
||||
inputs:
|
||||
solution: '$(Build.BinariesDirectory)\RelWithDebInfo\onnxruntime.sln'
|
||||
platform: 'x64'
|
||||
configuration: RelWithDebInfo
|
||||
msbuildArchitecture: 'x64'
|
||||
maximumCpuCount: true
|
||||
logProjectEvents: true
|
||||
workingFolder: '$(Build.BinariesDirectory)\RelWithDebInfo'
|
||||
createLogFile: true
|
||||
|
||||
# Esrp signing
|
||||
- template: win-esrp-dll.yml
|
||||
parameters:
|
||||
FolderPath: '$(Build.BinariesDirectory)\RelWithDebInfo\RelWithDebInfo\onnxruntime\capi'
|
||||
DisplayName: 'ESRP - Sign Native dlls'
|
||||
DoEsrp: true
|
||||
Pattern: '*.pyd,*.dll'
|
||||
|
||||
- task: PythonScript@0
|
||||
displayName: 'Build wheel'
|
||||
inputs:
|
||||
scriptPath: '$(Build.SourcesDirectory)\setup.py'
|
||||
arguments: 'bdist_wheel ${{ parameters.BUILD_PY_PARAMETERS }} $(NightlyBuildOption) --wheel_name_suffix=qnn'
|
||||
workingDirectory: '$(Build.BinariesDirectory)\RelWithDebInfo\RelWithDebInfo'
|
||||
|
||||
- task: CopyFiles@2
|
||||
displayName: 'Copy Python Wheel to: $(Build.ArtifactStagingDirectory)'
|
||||
inputs:
|
||||
SourceFolder: '$(Build.BinariesDirectory)\RelWithDebInfo\RelWithDebInfo\dist'
|
||||
Contents: '*.whl'
|
||||
TargetFolder: '$(Build.ArtifactStagingDirectory)'
|
||||
|
||||
- task: PublishBuildArtifacts@1
|
||||
displayName: 'Publish Artifact: ONNXRuntime python wheel'
|
||||
inputs:
|
||||
ArtifactName: onnxruntime_qnn
|
||||
|
||||
- script: |
|
||||
7z x *.whl
|
||||
workingDirectory: '$(Build.ArtifactStagingDirectory)'
|
||||
displayName: 'unzip the package'
|
||||
|
||||
- task: CredScan@3
|
||||
displayName: 'Run CredScan'
|
||||
inputs:
|
||||
debugMode: false
|
||||
continueOnError: true
|
||||
|
||||
- task: BinSkim@4
|
||||
displayName: 'Run BinSkim'
|
||||
inputs:
|
||||
AnalyzeTargetGlob: '+:file|$(Build.ArtifactStagingDirectory)\**\*.dll'
|
||||
|
||||
- task: TSAUpload@2
|
||||
displayName: 'TSA upload'
|
||||
condition: and (succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/main'))
|
||||
inputs:
|
||||
GdnPublishTsaOnboard: false
|
||||
GdnPublishTsaConfigFile: '$(Build.sourcesDirectory)\.gdn\.gdntsa'
|
||||
|
||||
- template: component-governance-component-detection-steps.yml
|
||||
parameters:
|
||||
condition: 'succeeded'
|
||||
Loading…
Reference in a new issue