በማንኛውም የዕለት ተዕለት ሃርድዌር ላይ የ AI ግምትን ለማፋጠን ሞክረው ከሆነ እና በዝግተኛ የ CPU ሩጫዎች እና በ GPU ውስብስብነት መካከል እንደተጣበቁ ከተሰማዎት፣ OpenVINO የጎደለው አካል ሊሆን ይችላል። በ Intel የተገነባ ሲሆን የተለመዱ የጥልቅ ትምህርት ሞዴሎችን በ CPUs፣ በተቀናጁ GPUs እና በ NPUs ላይ የሚሰሩ ፈጣንና ተንቀሳቃሽ መተግበሪያዎች ያደርጋቸዋል - ሙሉ ቁልልዎን ሳይጽፉ።
በዚህ ተግባራዊ፣ መፍትሄ ላይ ያተኮረ መመሪያ፣ OpenVINOን ከጫኑበት ጀምሮ ሞዴል ወደ መለወጥ፣ ማሻሻል እና ማስኬድ በትክክል እንዴት እንደሚጠቀሙበት ይማራሉ። በጣም የተለመዱ የስራ ፍሰቶችን እንሸፍናለን፣ የኮድ ምሳሌዎችን እናጋራለን እና አስፈላጊ የሆኑ የአፈጻጸም ምክሮችን እናጎላለን።
በጨረፍታ የሚማሩት ነገር፡-
- OpenVINOን በደቂቃዎች ውስጥ በ pip ይጫኑ
- Model Optimizerን በመጠቀም ሞዴሎችን (ONNX/TF/PyTorch export) ይቀይሩ
- በ Python ውስጥ OpenVINO Runtimeን በመጠቀም ግምትን ያካሂዱ
- በመጠን ማሻሻያ እና የቤንችማርክ መሣሪያዎች ያሻሽሉ
- በትንሹ የኮድ ለውጦች በ CPU፣ iGPU እና NPU ላይ ያስኬዱ
OpenVINO ምንድን ነው እና ለምን ይጠቀሙበታል?
OpenVINO በ Intel ሃርድዌር እና ከዚያም ባሻገር የ AI ሞዴሎችን ለማሻሻል እና ለማሰማራት የሚያገለግል ክፍት ምንጭ መሣሪያ ነው። በተለይም ሊገመት የሚችል አፈጻጸም፣ አነስተኛ ድብቅነት እና ተንቀሳቃሽነት ሲፈልጉ ለምርት ግምት በጣም ጠንካራ ነው - የማያስፈልግዎ ከሆነ ምንም ከባድ የ CUDA ማዋቀር አያስፈልግም። እንደ ONNX ያሉ ታዋቂ የሞዴል ቅርጸቶችን ይደግፋል እና ከተለመዱት ማዕቀፎች ጋር በሚያምር ሁኔታ ይዋሃዳል።
ቁልፍ ጥቅሞች:
- ፍጥነት፡ የተሻሻሉ kernels እና የግራፍ ለውጦች በ CPUs እና GPUs ላይ ግምትን ያፋጥናሉ።
- ተንቀሳቃሽነት፡ ተመሳሳይ መተግበሪያ አንድ መስመር የመሣሪያ ለውጥ በመጠቀም CPU፣ iGPU፣ NPUን ኢላማ ማድረግ ይችላል።
- ቅልጥፍና፡ መጠናዊነት፣ የሞዴል መጨናነቅ እና የሩጫ ጊዜ ማሻሻያዎች ድብቅነትን እና ማህደረ ትውስታን ይቀንሳሉ።
- ቀላልነት፡ ንጹህ የ Python API እና የ CLI መሣሪያዎች ለጀማሪዎች ተስማሚ ያደርጉታል።
ደረጃ 1፡ OpenVINOን ይጫኑ
ለአብዛኛዎቹ ተጠቃሚዎች፣ ፈጣኑ መንገድ በ pip በኩል ነው፡
- Python 3.9–3.12 መጫኑን ያረጋግጡ (64-ቢት)።
- ምናባዊ አካባቢ ይፍጠሩ እና ያግብሩ (የሚመከር)።
- ይጫኑ:
pip install -U openvino openvino-dev
- ያረጋግጡ:
python -c "import openvino; print(openvino.version)"
ኦፊሴላዊ የደረጃ በደረጃ ግብዓቶችን ከመረጡ ወይም የተወሰኑ የversion-ተኮር ማስታወሻዎችን እና የፕላትፎርም ድጋፍን መከታተል ከፈለጉ፣ በ OpenVINO Get Started ሰነዶች እና አሁን ባለው የሰነድ ማዕከል ይጀምሩ። ለፈጣን የ pip መጫኛ ማጣቀሻ እና ተኳሃኝነት፣ የ PyPI ገጽን ይመልከቱ።
ደረጃ 2፡ ሞዴልዎን ያዘጋጁ (ONNX ይመከራል)
OpenVINO ከ IR (Intermediate Representation) ሞዴሎች (.xml/.bin) ጋር በተሻለ ሁኔታ ይሰራል። አብዛኛዎቹ ተጠቃሚዎች መጀመሪያ ወደ ONNX ይልካሉ፣ ከዚያም Model Optimizerን በመጠቀም ወደ IR ይቀይራሉ።
ታዋቂ መንገዶች:
- PyTorch: torch.onnx.export → ONNX → OpenVINO IR
- TensorFlow/Keras: SavedModel → ONNX (በ tf2onnx በኩል) → OpenVINO IR
- ያለው ONNX፡ በቀጥታ ወደ OpenVINO IR ይቀይሩ
ፈጣን ምሳሌ (PyTorch → ONNX):
- ሞዴልዎን በ Python ውስጥ ወደ ONNX ይላኩ:
torch.onnx.export(model, dummy_input, "model.onnx", opset_version=17, do_constant_folding=True)
- ONNXን በ onnx.checker.check_model ያረጋግጡ ወይም በ onnxruntime አንድ ጊዜ ያሂዱት።
ደረጃ 3፡ በ Model Optimizer ወደ OpenVINO IR ቀይር
Model Optimizer የማዕቀፍ ሞዴሎችን ወደ OpenVINO IR ይለውጣል እና የግራፍ-ደረጃ ማሻሻያዎችን ይተገብራል። openvino-dev ከጫኑ በኋላ የሚከተለውን ማስኬድ ይችላሉ፡
- mo --input_model model.onnx --output_dir ov_model
ይህ model.xml እና model.bin ያመነጫል።
ጠቃሚ ባንዲራዎች:
- --input_shape፡ ሞዴልዎ ተለዋዋጭ ከሆነ የግቤት ልኬቶችን ያስገድዱ።
- --mean_values/--scale_values፡ በቅድመ-ሂደት ወቅት ግብዓቶችን መደበኛ ያድርጉ።
- --compress_to_fp16፡ ለፍጥነት/ማህደረ ትውስታ ጥቅም ትክክለኛነትን እና የሞዴል መጠንን ይቀንሱ።
ጠቃሚ ምክር፡ ዝቅተኛ-ድብቅነት ያለው የ CPU ግምትን እያነጣጠሩ ከሆነ፣ FP16 ብዙውን ጊዜ ጥሩ የፍጥነት እና የትክክለኛነት ሚዛን ይሰጣል። ለ A/B ሙከራ የመነሻ FP32 IR ያስቀምጡ።
ደረጃ 4፡ በ OpenVINO Runtime ግምትን ያሂዱ (Python)
ዋናው የሩጫ ጊዜ የስራ ፍሰት ቀጥተኛ ነው።
ምሳሌ (የምስል ምደባ):
from openvino.runtime import Core
import numpy as np
import cv2
core = Core
model = core.read_model("ov_model/model.xml")
compiled_model = core.compile_model(model, device_name="CPU") # options: "CPU", "GPU", "AUTO", "NPU" (የሚደገፍበት)
input_layer = compiled_model.inputs. የ CPU መገናኛ ነጥቦችን እና የክር አጠቃቀምን መገለጫ ማድረግ ከፈለጉ፣ Intel VTune Profiler በተለይ ለ OpenVINO መተግበሪያዎች የምግብ አዘገጃጀት መመሪያ አለው።
ደረጃ 6፡ በመጠን ማሻሻያ (INT8) ያሻሽሉ።
ድህረ-ስልጠና መጠናዊነት (PTQ) አነስተኛ ትክክለኛነት ኪሳራ ጋር የሞዴል መጠንን ሊቀንስ እና ፍጥነትን ሊያሳድግ ይችላል፡
- openvino-dev ጋር የተካተተውን አብሮ የተሰራውን POT (ድህረ-ስልጠና ማሻሻያ መሣሪያ) ይጠቀሙ።
- የምርት ውሂብዎን የሚመስል ትንሽ የካሊብሬሽን ዳታ ስብስብ ያቅርቡ።
- INT8 IRን ይላኩ እና ቤንችማርክ ያድርጉት። ትክክለኛነት በቂ ካልሆነ የተቀላቀለ ትክክለኛነትን (INT8 + FP16) ወይም የተመረጠ መጠናዊነትን ይሞክሩ።
የተለመደ የመጠን ፍሰት:
- የ POT መጠናዊ መለኪያዎችን ያዋቅሩ (በእያንዳንዱ-ቴንሰር ከ በእያንዳንዱ-ቻናል፣ ሲምሜትሪክ ከ asymmetry ጋር)።
- የካሊብሬሽን እና የማረጋገጫ ስራዎችን ያካሂዱ።
- KPIsን ያወዳድሩ፡ ድብቅነት፣ throughput፣ top-1/top-5 ትክክለኛነት ወይም የተወሰኑ ተግባራትን መለኪያዎች።
ደረጃ 7፡ ቅድመ-ሂደትን በትክክለኛው መንገድ ይያዙ
Model I/O የሚጠበቁ ነገሮች ብዙውን ጊዜ ይለያያሉ። ቅድመ-ሂደትዎን ደረጃውን የጠበቀ ያድርጉ፡
- ወደሚጠበቀው መጠን (ለምሳሌ 224×224) መጠን ይቀይሩ/መሃል ላይ ይከርክሙ
- የሰርጥ ቅደም ተከተል (RGB vs BGR)
በ OpenVINO Runtime ውስጥ PrePostProcessor APIን በመጠቀም የቅድመ-ሂደት ደረጃዎችን ወደ IR ውስጥ ማስገባት ይችላሉ ስለዚህ የመተግበሪያዎ ኮድ ንጹህ እና ተንቀሳቃሽ ሆኖ ይቆያል።
የምሳሌ ቁራጭ:
from openvino.runtime import Core, Layout, Type
from openvino.preprocess import PrePostProcessor
core = Core
model = core.read_model("ov_model/model.xml")
ppp = PrePostProcessor(model)
ppp.input.tensor.set_layout(Layout("NHWC"))
ppp.input.preprocess.convert_element_type(Type.f32)
ppp.output.tensor
model = ppp.build
compiled_model = core.compile_model(model, "AUTO")
ደረጃ 8፡ ወደ ቪዲዮ እና ዥረት መጠን ይጨምሩ
ለቪዲዮ ትንተና፣ የ OpenVINO ግምትን ከ OpenCV ወይም GStreamer ጋር ማገናኘት ይችላሉ። FPSን ከፍ ለማድረግ እና ድብቅነትን ዝቅ ለማድረግ asynchronous የግምት ጥያቄዎችን እና የቡድን ሂደትን ይጠቀሙ።
ጠቃሚ ምክሮች:
- async API ይጠቀሙ፡ ብዙ የበረራ ላይ ያሉ ጥያቄዎች በ CPUs ላይ throughputን ያሻሽላሉ።
- ሞዴልዎ ከቬክተር አፈፃፀም የሚጠቅም ከሆነ ፍሬሞችን በቡድን ያዘጋጁ።
- በብዙ-ኮር ሲስተሞች ላይ ሊገመት የሚችል ድብቅነት ለማግኘት ክሮች ይሰኩ ወይም ዥረቶችን ያስተካክሉ።
ደረጃ 9፡ በመሳሪያዎች ላይ በብልህነት ያስኬዱ
የ OpenVINO ሱፐር ሀይሎች አንዱ እንከን የለሽ የመሣሪያ ኢላማ ነው።
- CPU፡ ጠንካራ ነባሪ; በስፋት ይገኛል; ለጫፍ እና ለአገልጋይ በጣም ጥሩ።
- GPU (የተቀናጀ)፡ ያለ discrete GPU ጥሩ ማጣደፍ; የአሽከርካሪ ጥራት ጉዳይ ነው።
- AUTO፡ የሩጫ ጊዜ እንዲመርጥ ያድርጉ; ለተንቀሳቃሽ መተግበሪያዎች በጣም ጥሩ።
- Hetero አፈፃፀም፡ ንብርብሮችን በሚጠቅሙባቸው መሳሪያዎች ላይ ይከፋፍሉ።
ለተንቀሳቃሽነት በ AUTO ይጀምሩ። የበለጠ ጥብቅ ቁጥጥር ከፈለጉ፣ CPU vs GPU ቤንችማርክ ያድርጉ እና በእያንዳንዱ ሞዴል ይወስኑ።
በተግባር ምሳሌዎች
- ONNX → IR ቀይር; FP16 ይጠቀሙ; AUTO መሣሪያ; async ግምት።
- ቅድመ-ሂደት፡ መጠን መቀየር፣ መሃል ላይ መከርከም፣ መደበኛ ማድረግ።
- በትንሽ ትክክለኛነት ጠብታ >2× throughput ከፈለጉ መጠናዊ ያድርጉ።
- ተለዋዋጭ ቅርጾች መያዛቸውን ያረጋግጡ ወይም የግቤት መጠን ያስተካክሉ።
- ውጤቶችን ይተንትኑ፡ ሳጥኖችን ይፍቱ፣ የ NMS ደንበኛ-ጎን ይተግብሩ።
- በ CPUs ላይ የእውነተኛ ጊዜ ለመምታት INT8ን ለጫፍ ማስኬጃዎች ይጠቀሙ።
- የፖስት-ሂደትን (argmax, color mapping) በቬክተር በሆነ NumPy ያሻሽሉ።
- OpenVINO-text ማሻሻያዎችን ሲገኙ ይጠቀሙ።
- የቶኪኒዜሽን መስመሮችን ያከማቹ; ለትራንስፎርመሮች INT8ን ያስቡ።
- Stable Diffusion / Generative:
- FP16ን ኢላማ ያድርጉ; መርሐግብር አስኪያጅ/ግምት loopsን ያሻሽሉ።
- መገለጫ ማድረግ ይረዳል -የስርጭት መስመሮች ብዙ-ደረጃ ናቸው።
የሙከራ እና የማረጋገጫ ዝርዝር
- ለአነስተኛ የሙከራ ስብስብ ውጤቶችን ከመነሻ (PyTorch/TF/ONNXRuntime) ጋር ያወዳድሩ።
- ከFP16/INT8 ልወጣዎች በኋላ የቁጥር ልዩነቶችን ያረጋግጡ።
- በሚጠበቀው ጭነት ውስጥ ድብቅነት p50/p95 እና throughput ይለኩ።
- የጭንቀት ፈተና፡ የማስታወሻ ወይም የክር ችግሮችን ለመያዝ ረጅም ጊዜ የሚቆዩ ሩጫዎች።
ችግር ፈቺ ፈጣን መልሶች
- ከ Model Optimizer ጋር የመቀየር ስህተቶች:
- openvino-dev ያዘምኑ; አዲሱን opset ይሞክሩ; የ ONNX ግራፍን ያቃልሉ (onnxsim)።
- --input_shape ያቅርቡ; ተለዋዋጭ የግቤት ድጋፍን ያረጋግጡ።
- FP16/INT8፣ async API ይጠቀሙ፣ ክሮች/ዥረቶችን ያስተካክሉ; benchmark_app ያሂዱ።
- አሽከርካሪዎችን ያዘምኑ; device="AUTO" ይሞክሩ; ለሚደገፉ GPUs ሰነዶችን ያረጋግጡ።
የመማሪያ ግብዓቶች እና ኦፊሴላዊ ሰነዶች
- ተግባራዊ ትምህርቶችን፣ ማስታወሻ ደብተሮችን እና የማዋቀር መመሪያዎችን ለማግኘት እዚህ ይጀምሩ፡ OpenVINO Get Started
- ለ APIs፣ Model Optimizer፣ POT፣ ናሙናዎች ሙሉ የሰነድ ፖርታል፡ OpenVINO Docs
- ፈጣን ጭነቶችን እና ተኳሃኝነትን ለማግኘት የ Pip መጫኛ ማጣቀሻ፡ PyPI openvino
- ለ OpenVINO መተግበሪያዎች የመገለጫ እና የአፈጻጸም ትንተና፡ Intel VTune guide
በነገራችን ላይ ስለ ማሻሻያ እና ማሰማራት ቴክኒካዊ ይዘትን፣ ትምህርቶችን ወይም የውስጥ ጨዋታ መጽሃፎችን እያዘጋጁ ከሆነ፣ እንደ Sider.AI ያሉ የመጻፊያ ቦታዎች ኮድን፣ ቤንችማርኮችን እና ትረካዎችን በፍጥነት አንድ ላይ እንዲሰፉ ሊረዱዎት ይችላሉ—ውስብስብ የ OpenVINO የአፈጻጸም ሙከራዎችን ወይም ብዙ መሣሪያዎችን ማነጻጸሪያዎችን ሲመዘግቡ ጠቃሚ ነው። ሊተገበሩ የሚችሉ ቀጣይ እርምጃዎች
- OpenVINOን በ pip ይጫኑ እና በናሙና IR ላይ benchmark_app ያሂዱ።
- የሚታወቅ-ጥሩ ONNX ሞዴል (ለምሳሌ ResNet50) ይለውጡ እና ትክክለኛነትን ያረጋግጡ።
- FP16ን ይሞክሩ፣ ከዚያ INT8ን ከ POT ጋር; ድብቅነትን እና throughput ይለኩ።
- device_nameን በ CPU፣ GPU እና AUTO መካከል ይቀያይሩ; ለዒላማ ሃርድዌርዎ ምርጡን ይምረጡ።
- ተጨማሪ አፈጻጸምን ማውጣት ከፈለጉ በ VTune መገለጫ ያድርጉ።
ቁልፍ መውሰድ
- OpenVINO የ AI ግምትን ፈጣን፣ ተንቀሳቃሽ እና ሃርድዌርን ያውቃል።
- ወደ IR መቀየር እና ብልጥ ቅድመ-ሂደት አስተማማኝ የፍጥነት መጨመር ያስገኛል።
- መጠነኛነት እና asynchronous አፈፃፀም ለእውነተኛ ጊዜ አፈፃፀም የእርስዎ ምርጥ ጓደኞች ናቸው።
- የመሣሪያ ተለዋዋጭነት (CPU/iGPU/NPU/AUTO) ማለት አንድ የኮድ መሠረት፣ ብዙ ኢላማዎች ማለት ነው።
FAQ
Q1:OpenVINOን በቀላሉ እንዴት መጫን እችላለሁ?
ምናባዊ አካባቢን ይጠቀሙ እና ያሂዱ፡ pip install -U openvino openvino-dev። ፈጣን የማስመጣት ቼክ በማድረግ ያረጋግጡ እና ለፕላትፎርም ዝርዝሮች ኦፊሴላዊውን Get Started ሰነዶችን ያማክሩ።
Q2:ሞዴሌን ወደ OpenVINO IR እንዴት መለወጥ እችላለሁ?
ሞዴልዎን ወደ ONNX ይላኩ፣ ከዚያ .xml/.bin IR ፋይሎችን ለመፍጠር Model Optimizer (mo) ያሂዱ። የግቤት ቅርጾችን ያቅርቡ እና ለፍጥነት እና ለማስታወስ ጥቅም FP16ን ያስቡበት።
Q3:OpenVINO በ CPU እና በተቀናጀ GPU ላይ ያለ ኮድ ለውጦች መስራት ይችላል?
አዎ። ሞዴሉን በ device_name="AUTO", "CPU" ወይም "GPU" ያጠናቅሩ። የተቀረውን ኮድዎን ሳይነካ አንድ መለኪያ በመጠቀም መሳሪያዎችን መቀየር ይችላሉ።
Q4:በ OpenVINO ግምትን እንዴት ማፋጠን እችላለሁ?
FP16 ወይም INT8 መጠናዊነትን፣ asynchronous የግምት APIን ይጠቀሙ እና ክሮች እና ዥረቶችን ለማስተካከል benchmark_app ይጠቀሙ። ለበለጠ የአንገት መቆለፊያ ትንተና በ VTune መገለጫ ያድርጉ።
Q5:OpenVINO NLP እና generative ሞዴሎችን ይደግፋል?
አዎ. የተለያዩ NLP እና የስርጭት ሞዴሎችን ይደግፋል; FP16 ይጠቀሙ እና ለትራንስፎርመሮች INT8ን ያስቡበት። ከማመቻቸት በኋላ ትክክለኛነትን ያረጋግጡ እና በጭነት ውስጥ ያለውን ድብቅነት ይለኩ።