زه یو چټک ترلاسه کړ: د وینیل ONNX Runtime په کارولو سره یو واقعي وخت YOLOv8 ویډیو پایپینټ جوړ کړئ. نه پوښل شوي فریم ورکشاپونه. نه Python bottlenecks. یوازې خام C ++ grit. موږ صادق شو: پیتون د څیړنې لابراتوار د بیلابیلو پادری دی. مګر که تاسو د عصري شبکې په پراخه کچه له خوا د H.264 ویډیو له لارې سټرایډ کړئ؟ پیتون د Global Interpreter Lock (GIL) او د حافظه کاپی کولو سره د هغې د ناروغۍ عاجل دي. ما په دې وروستيو کې سره یو ساده هدف ورکړل شو: د ویډیو ټیم لپاره د وینیل ONNX runtime او یو YOLOv8 segmentation ماډل په کارولو سره چټک پایلې جوړ کړئ. دا په کاغذ کې آسانه سمه کړه. FFmpeg راټول کړئ، فریمونه پروسس کړئ او دوی راټول کړئ. دلته دا ده چې څنګه زه د 10 FPS پروتوټپیډیټ په روښانه 29 FPS سټیټ کې وښاکل، او د "د پایله بورډ" بګونه چې ما باید په لاره کې کولی شو. In reality, it was a journey through engineering hell. (د masochists لپاره بشپړ سرچینې کوډ: ویډیو-یوولو-دش پروسیسر) د ویډیو YOLO-DASH پروسیسر د FogAI Sandbox: د انټرنېټ مخکې د تصدیق دا د ذخیره د یو مستقل لګښت نه ده -- دا یو زه د دې چاپیریال څخه کار واخلئ ترڅو د کمپیوټر بصیرت ځانګړي ماډلونه، انجن جوړونه، او د ګټور کولو نمونې په سخته توګه ازموینه کړي مخکې چې دوی ته د کمپیوټر بصیرت ته وده ورکړي. . dedicated testbed FogAI core که یو ستراتیژۍ (که د Zero-Copy هارډویر نقشه کولو په څیر) دلته د 29 FPS په وخت کې ژوند نه کوي، نو دا په صنعتي اتومات عصبي سیسټم کې کار نه کوي. Previous Chapters in the FogAI Saga: The Manifesto: Prompts دي overrated. دلته دا ده چې زه په Python پرته د Zero-Copy Fog AI Node جوړ کړم د کارپوریشن تاریخ: Prompts دي ډبره شوي: زه د Python پرته د Zero-Copy نغ AI نښلیدو جوړ کړ (او دا درد کوي) د ناروغۍ سرچینه: GitHub: NickZt/FogAi د "Memory Copy Tax" ټریپ ډیری کمپيوټر لید پروټوکټونه چټک دي ځکه چې دوی د حافظه په څیر د Hot Potato لوبه کوي. زما لومړني آرکټیکټوریټ د "نډول" غلطۍ دی: FFmpeg د H.264 په YUV هارډویر فارمونو کې ډکولو، دا په OpenCV کې بدل شوی (BGR) د نمونوي د تغذیه، د RGB انځور لپاره د ماسک غوښتنلیک، دا بدل د YUV، او په پای کې د کوډر ته ځي. cv::Mat راځي په ARM CPU کې چې 4K فریمونه پروسس کوي، چې په پرتله د یوازې د ټوټې په څیر حرکت کوي. That's three unnecessary memory copies and two heavy pixel-format conversions. 30% of your cycles زه د دې کارولو سره حل کړم د فریم بدلولو په ځای کې، زه د د هارډویر Y-plane (Luminance) په مستقیم ډول د OpenCV د پوښونو Zero-Copy Hardware Mapping AVFrame cv::Mat د C++ // Mapping the hardware Y-plane natively - zero memcpy, zero overhead. cv::Mat y_plane(yuvFrame->height, yuvFrame->width, CV_8UC1, yuvFrame->data, yuvFrame->linesize); // YOLO segmentation masks now inject binary modifications directly // onto the hardware Y sequence. y_plane(bbox).setTo(0, valid_mask); د بدلون په پرتله، زه په بشپړه توګه د CPU بوتل نښلوي. مګر زه هنوز د 23 FPS محدود شو. Why? Mutability او Asynchronous Reorder د پروفایل کولو ښيي چې زما ټریډونه په sequential death grip کې بند شوي دي. Abstraction پر بنسټ د مشترکه داخلي حفرونو بدلون. که زه یوازې په یوه واحد ماډل کې ډیری ټریډونه وده ورکړم، دوی یوځای ته وده ورکړم، او سیسټم segfault شوی. YOLO زه د یو رقابتی پوډر د موډلونه --- په هر کارکوونکي ټیم کې یو واحد ONNX ماډل انټرنټ. The Fix: std::unique_ptr<YOLO_Segment> که څه هم، یو پوښونه شتون لري: لکه څنګه چې کارکوونکي په مختلفو وختونو کې بشپړ شي، Frame 2 ممکن د Frame 1 څخه مخکې بشپړ شي، د ویډیو په څیر د 90s jump-cut په څیر چټک کړي. ما باید د Reorder پمپ په کارولو سره د د H.264 synchronization تضمین کړي. DASH video requires strict frame order. std::map د C++ // Reorder buffer logic to keep the stream sequential std::map<int64_t, FramePayload> reorderBuffer; int64_t expected_pts = 0; while (true) { auto payload = inferenceQueue.pop(); // Workers drop processed frames here reorderBuffer[payload.pts] = payload; // Emit frames only when the sequential timestamp flags align while (!reorderBuffer.empty() && reorderBuffer.begin()->first == expected_pts) { auto it = reorderBuffer.begin(); encoder.writeFrame(it->second.yuvFrame, it->second.pts); reorderBuffer.erase(it); expected_pts++; } } د Final Boss: Thread Cache Thrashing په کاغذ کې، د منطق بشپړ دی. په عملی توګه، زما FPS د زما د وخت-to-Inference (TTI) لټینټونه د 43ms څخه تر 890ms ته وده ورکړي. 10 FPS I was a victim of CPU Cache Thrashing. که څه هم زه زما د کڅوړې کښته کړم، د زیربنا ML کتابتونونه (OpenCV او ONNX) زما ته د خپل داخلي ټریډونو له خوا "د مرسته" کوي. ONNX Runtime: د Hardware_concurrency() / 2 ټریډونو لپاره د معیارونو لپاره. د 10 کارکوونکو سره، دا زما د 20 ټریډ CPU کې 100+ داخلي ټریډونه وده ورکړي. OpenCV: په اتوماتيک ډول د کارکوونکو لپاره د عملونو لکه .setTo( لپاره د کارکوونکو ته تادیه کوي. زما ځانګړي کارکوونکي د ONNX ټریډونو سره مبارزه کوي، کوم چې د OpenCV ټریډونو سره مبارزه کوي. Thousands of context switches were destroying my L1/L2 caches every second. د حل د غیرقانوني مطابقت لپاره د بیلابیلو "نه" دی. ما د کتابتونونو څخه د ګرځنده ټریډونو لپاره خپل حق راټول کړ: د C++ int main() { // Globally disable implicit OpenCV threading cv::setNumThreads(1); // Cap ONNX Runtime to a single thread per op Ort::SessionOptions session_options; session_options.SetIntraOpNumThreads(1); session_options.SetInterOpNumThreads(1); } د کنیکټایټ بدلولو صدا دی. زما د CPU لارښوونې کیچ synchronized دی. د پایپینال په چټکۍ سره د بیلګې په لټه کې دی سره د TTI حد ~ 329ms. 29 FPS د Ego په اړه د ساتنې: د وینیل ستراتیژۍ یو عمومي پوښتنه چې زه ترلاسه کړم دا دی: "اگر تاسو په کارولو کې ډیره تمرکز لرئ، نو ځکه چې تاسو د انجن فلک نه کړئ او د کورلونو په ځان کې غوره کړئ؟" ځواب دی Technical Debt avoidance. که تاسو د انټرنېټ د انټرنېټونه هکوي، تاسو د غیر پای ته د ساتنې چڼاسکه ته لیږدوي. هر وخت چې د نوي نسخه د تازه هارډویر ملاتړ سره راټول کیږي --- لکه (57٪ prefill boost) او یا --- تاسو به manually re-port your custom optimizations ته اړتیا لرئ. By sticking with a ، زه کولی شي د دې هارډویر اپ ڈیټونو لپاره وړیا "کښته کړي" یوازې د نسخه شمیره له لارې. ARM KleidiAI Intel DL Boost (VNNI) Vanilla Inference Engine همدارنګه، زه د کوډ / decoding پايپینټ نه غوره کړم. چرا؟ ځکه چې د هارډویر عرضه کوونکي اوس هم کړ. که څه هم دا دی یا د ، دا چپس د H.264 لپاره د سیلیکون کچه سرعت لري. د کوډ په تمرکز کې د کوډیکونو ته د فلزي لپاره چې دوی جوړ شوي دي. Intel QuickSync Rockchip VPU Zero-Copy Bridge په پایله کې: د ګيچولو بند کړئ، د پروفایل کولو پیل کړئ د واقعي نړۍ لپاره د AI پراختیا ته اړتيا لري چې د استازیتوب کټګورۍ کټګورۍ سره چې موږ ډیر راحت وي. Python د دې لټینټ مالیې مخنیوی کوي تر څو چې تاسو د سیسټم په تولید کې جوړ کړئ. که تاسو په ویډیو کې د ټینسر payloads وزن لري: د pixel بدلونونو کولی شي -- په مستقیم ډول د هارډویر هوايي کار وکړي. خپل ماډلونه تخصیص کړئ -- د کارکوونکي لپاره یو انډول. Reorder sequential outputs --- نه اجازه کړي async finish times ستاسو د جریان له لاسه ورکړي. هرگز اجازه نه ورکړئ چې ستاسو د کتابتون د خپل ټریډونه وده ورکړي. Stay Vanilla --- خپل آرکټیکټریټ، نه د انجن، د ټیکنالوژۍ د قرض کم کولو لپاره غوره کړئ. بل د FogAI نندارې لپاره؟ موږ Prepping د Zero Copy Run لپاره ... Grounding DINO