13
13
import errno
14
14
import multiprocessing
15
15
import typing
16
+ import sysconfig
16
17
import defusedxml .ElementTree as ET
17
18
from defusedxml import defuse_stdlib
18
19
39
40
40
41
PACKAGE_NAME = config ('WHEEL_PACKAGE_NAME' , 'openvino-nvidia' )
41
42
OPENVINO_REPO_URI = config ('OPENVINO_REPO_DOWNLOAD_URL' , 'https://github.com/openvinotoolkit/openvino.git' )
42
- WHEEL_VERSION = config ('WHEEL_VERSION' , '2022.3.0' )
43
+ WHEEL_VERSION = config ('WHEEL_VERSION' , "2024.1.0" )
43
44
OPENVINO_REPO_TAG = config ('OPENVINO_REPO_TAG' , WHEEL_VERSION )
44
45
NVIDIA_PLUGIN_CMAKE_TARGET_NAME = 'openvino_nvidia_gpu_plugin'
45
46
LIBS_RPATH = '$ORIGIN' if sys .platform == 'linux' else '@loader_path'
@@ -147,6 +148,7 @@ def create_pip_command(*options):
147
148
148
149
def run_command (command , cwd : str = None , on_fail_msg : str = '' , env = None ):
149
150
try :
151
+ print (f"run_command: { ' ' .join (command )} " )
150
152
subprocess .check_call (command , cwd = cwd , env = env ) # nosec - disable B603:subprocess_without_shell_equals_true check
151
153
except subprocess .CalledProcessError as e :
152
154
raise RuntimeError (on_fail_msg ) from e
@@ -226,15 +228,23 @@ def run(self):
226
228
if self .cmake_exec is None :
227
229
raise FileNotFoundError ("cmake path not located on path" )
228
230
229
- self .mkpath (self .deps_dir )
230
231
self .clone_openvino_src ()
232
+ # TODO: Uncomment when issue with conan dependecies will be resolved.
233
+ # When uncomment this line, got the following error during
234
+ # cmake configuration step:
235
+ # CMake Error at build/protobuf-Target-release.cmake:74 (set_property):
236
+ # set_property can not be used on an ALIAS target.
237
+ # ...
238
+ # self.openvino_conan_install()
231
239
self .configure_openvino_cmake ()
232
240
if self .force :
233
241
self .build_openvino ()
234
242
self .build_nvidia_plugin ()
235
243
self .locate_built_lib ()
236
244
237
245
def clone_openvino_src (self ):
246
+ self .mkpath (self .deps_dir )
247
+
238
248
if os .path .isdir (self .openvino_src_dir ):
239
249
return
240
250
self .announce ("Cloning the OpenVINO sources" , level = 3 )
@@ -246,16 +256,41 @@ def clone_openvino_src(self):
246
256
cwd = self .openvino_src_dir ,
247
257
on_fail_msg = 'Failed to update the OpenVINO git submodules' )
248
258
259
+ def openvino_conan_install (self ):
260
+ if not os .path .isdir (self .openvino_build_dir ):
261
+ self .mkpath (self .openvino_build_dir )
262
+
263
+ run_command (["conan" ,
264
+ "install" ,
265
+ f'-of={ self .openvino_build_dir } ' ,
266
+ '--build=missing' ,
267
+ self .openvino_src_dir ],
268
+ cwd = self .openvino_build_dir ,
269
+ on_fail_msg = 'Failed to install conan dependecies for OpenVINO CMake Project' )
270
+
249
271
def configure_openvino_cmake (self ):
250
272
if not os .path .isdir (self .openvino_build_dir ):
251
273
self .mkpath (self .openvino_build_dir )
252
274
253
- configure_command = [self .cmake_exec , f'-S{ self .openvino_src_dir } ' , f'-B{ self .openvino_build_dir } ' ,
254
- f'-DCMAKE_BUILD_TYPE={ self .build_configuration_name } ' ,
275
+ python_include_dir = sysconfig .get_path ("include" )
276
+
277
+ configure_command = [self .cmake_exec ,
278
+ '-G' , 'Unix Makefiles' ,
279
+ f'-S{ self .openvino_src_dir } ' ,
280
+ f'-B{ self .openvino_build_dir } ' ,
281
+ '-DENABLE_PLUGINS_XML=ON' ,
282
+ '-DCMAKE_VERBOSE_MAKEFILE=ON' ,
283
+ '-DENABLE_NVIDIA=ON' ,
255
284
'-DENABLE_PYTHON=ON' ,
285
+ f'-DPython3_EXECUTABLE={ sys .executable } ' ,
286
+ f'-DPython3_INCLUDE_DIR={ python_include_dir } ' ,
256
287
f'-DPYTHON_EXECUTABLE={ sys .executable } ' ,
257
- f'-DWHEEL_VERSION={ WHEEL_VERSION } ' ,
258
- '-DENABLE_WHEEL=ON' ]
288
+ f'-DPYTHON_INCLUDE_DIR={ python_include_dir } ' ,
289
+ '-DNGRAPH_PYTHON_BUILD_ENABLE=ON' ,
290
+ f'-DCMAKE_BUILD_TYPE={ self .build_configuration_name } ' ,
291
+ f'-DOPENVINO_EXTRA_MODULES={ self .openvino_contrib_src_dir } /modules/nvidia_plugin' ,
292
+ '-DENABLE_WHEEL=ON' ,
293
+ f'-DWHEEL_VERSION={ WHEEL_VERSION } ' ]
259
294
self .announce ("Configuring OpenVINO CMake Project" , level = 3 )
260
295
run_command (configure_command ,
261
296
cwd = self .openvino_build_dir ,
@@ -333,11 +368,18 @@ def locate_built_lib(self):
333
368
set_rpath (LIBS_RPATH , os .path .realpath (path ))
334
369
335
370
336
- class InstallCMakeLib (install_lib ):
371
+ class InstallCMakeLib (install_lib , build_clib ):
372
+ def initialize_options (self ):
373
+ install_lib .initialize_options (self )
374
+ build_clib .initialize_options (self )
375
+
337
376
def finalize_options (self ):
338
- super ().finalize_options ()
377
+ install_lib .finalize_options (self )
378
+ build_clib .finalize_options (self )
379
+
339
380
self .git_exec = shutil .which ("git" )
340
381
self .force = None
382
+ self .deps_dir = os .path .abspath (os .path .join (self .build_temp , "deps" ))
341
383
self .set_undefined_options ('install' , ('force' , 'force' ))
342
384
343
385
def run (self ):
@@ -373,6 +415,17 @@ def install_openvino_package_and_other_dependencies(self):
373
415
run_command (requirements_py ,
374
416
on_fail_msg = f'Failed to install dependencies from { path_to_requirements_txt } ' )
375
417
418
+ def check_plugins_xml (self , dst_xml_file ):
419
+ if not os .path .exists (dst_xml_file ):
420
+ from glob import glob
421
+
422
+ plugins_xml_path = f"{ self .deps_dir } /openvino/bin/**/*/plugins.xml"
423
+ print (f"plugins_xml_path = { plugins_xml_path } " )
424
+ for src_xml_file in glob (f"{ self .deps_dir } /openvino/bin/**/*/plugins.xml" , recursive = True ):
425
+ print (f"src_xml_file = { src_xml_file } " )
426
+ shutil .copyfile (src_xml_file , dst_xml_file )
427
+ break
428
+
376
429
def get_openvino_package_dir (self ):
377
430
import openvino
378
431
openvino_package_dir = os .path .dirname (os .path .abspath (openvino .__file__ ))
@@ -386,6 +439,9 @@ def register_nvidia_plugin(self):
386
439
f"libopenvino_nvidia_gpu_plugin.{ platform_specifics .get_lib_file_extension ()} " )
387
440
388
441
xml_file = os .path .join (openvino_package_libs_dir , "plugins.xml" )
442
+
443
+ self .check_plugins_xml (xml_file )
444
+
389
445
tree = ET .parse (xml_file ).getroot ()
390
446
plugins = tree .find ("plugins" )
391
447
if all (plugin .get ('name' ) != 'NVIDIA' for plugin in plugins .iter ('plugin' )):
@@ -407,7 +463,7 @@ def unregister_nvidia_plugin(self):
407
463
break
408
464
409
465
def test_nvidia_plugin (self ):
410
- from openvino . runtime import Core
466
+ import openvino as ov
411
467
test_model_convert_fp32 = """
412
468
<?xml version="1.0"?>
413
469
<net name="Function_1208" version="10">
@@ -439,7 +495,7 @@ def test_nvidia_plugin(self):
439
495
</edges>
440
496
</net>
441
497
""" .encode ('ascii' )
442
- core = Core ()
498
+ core = ov . Core ()
443
499
model = core .read_model (model = test_model_convert_fp32 )
444
500
try :
445
501
core .compile_model (model = model , device_name = "NVIDIA" )
0 commit comments