تشغيل وحدات IoT Edge الحالية من أجهزة Azure Stack Edge Pro FPGA على جهاز Azure Stack Edge Pro GPU

ينطبق على: نعم ل Pro GPU SKUAzure Stack Edge Pro - GPUنعم ل Pro R SKUAzure Stack Edge Pro R

إشعار

نوصي بشدة بنشر أحدث إصدار من IoT Edge في Linux VM. يستخدم IoT Edge المدار على Azure Stack Edge إصدارا قديما من وقت تشغيل IoT Edge الذي لا يحتوي على أحدث الميزات والتصحيحات. للحصول على إرشادات، راجع كيفية نشر جهاز Ubuntu ظاهري. لمزيد من المعلومات حول توزيعات Linux المدعومة الأخرى التي يمكنها تشغيل IoT Edge، راجع أنظمة Azure IoT Edge المدعومة - محركات الحاويات.

توضح هذه المقالة بالتفصيل التغييرات المطلوبة لوحدة IoT Edge المستندة إلى docker التي تعمل على Azure Stack Edge Pro FPGA حتى تتمكن من تشغيلها على نظام IoT Edge الأساسي المستند إلى Kubernetes على جهاز Azure Stack Edge Pro GPU.

حول تنفيذ IoT Edge

يختلف تنفيذ IoT Edge على أجهزة Azure Stack Edge Pro FPGA مقابل ذلك على أجهزة Azure Stack Edge Pro GPU. بالنسبة لأجهزة GPU، يتم استخدام Kubernetes كمنصة استضافة ل IoT Edge. يستخدم IoT Edge على أجهزة FPGA نظاما أساسيا يستند إلى docker. تتم ترجمة نموذج التطبيق المستند إلى IoT Edge docker تلقائيا إلى نموذج تطبيق Kubernetes الأصلي. ومع ذلك، قد لا تزال هناك حاجة إلى بعض التغييرات حيث يتم دعم مجموعة فرعية صغيرة فقط من نموذج تطبيق Kubernetes.

إذا كنت تقوم بترحيل أحمال العمل الخاصة بك من جهاز FPGA إلى جهاز GPU، فستحتاج إلى إجراء تغييرات على وحدات IoT Edge الحالية لأولئك لتشغيلها بنجاح على النظام الأساسي Kubernetes. قد تحتاج إلى تحديد متطلبات التخزين والشبكات واستخدام الموارد ووكيل الويب بشكل مختلف.

التخزين

ضع في اعتبارك المعلومات التالية عند تحديد التخزين لوحدات IoT Edge النمطية.

  • يتم تحديد تخزين الحاويات على Kubernetes باستخدام تحميلات وحدة التخزين.
  • لا يمكن أن يكون للتوزيع على Kubernetes ارتباطات لربط التخزين المستمر أو مسارات المضيف.
    • للتخزين المستمر، استخدم Mounts مع النوع volume.
    • بالنسبة إلى مسارات المضيف، استخدم Mounts مع النوع bind.
  • بالنسبة ل IoT Edge على Kubernetes، يعمل الربط من خلال Mounts فقط للدليل، وليس للملف.

مثال - التخزين عبر عمليات تحميل وحدة التخزين

بالنسبة إلى IoT Edge على docker، يتم استخدام روابط مسار المضيف لتعيين المشاركات على الجهاز إلى مسارات داخل الحاوية. فيما يلي خيارات إنشاء الحاوية المستخدمة على أجهزة FPGA:

{
  "HostConfig": 
  {
   "Binds": 
    [
     "<Host storage path for Edge local share>:<Module storage path>"
    ]
   }
}

بالنسبة إلى مسارات المضيف ل IoT Edge على Kubernetes، يظهر مثال على استخدام Mounts مع النوع bind هنا:

{
    "HostConfig": {
        "Mounts": [
            {
                "Target": "<Module storage path>",
                "Source": "<Host storage path>",
                "Type": "bind"
            }
        ]
    }
}

بالنسبة لأجهزة GPU التي تقوم بتشغيل IoT Edge على Kubernetes، يتم استخدام تحميلات وحدة التخزين لتحديد التخزين. لتوفير التخزين باستخدام المشاركات، ستكون قيمة Mounts.Source اسم مشاركة SMB أو NFS التي تم توفيرها على جهاز GPU الخاص بك. /home/input هو المسار الذي يمكن الوصول إلى وحدة التخزين داخل الحاوية. فيما يلي خيارات إنشاء الحاوية المستخدمة على أجهزة GPU:

{
    "HostConfig": {
        "Mounts": [
        {
            "Target": "/home/input",
            "Source": "<nfs-or-smb-share-name-here>",
            "Type": "volume"
        },
        {
            "Target": "/home/output",
            "Source": "<nfs-or-smb-share-name-here>",
            "Type": "volume"
        }]
    }
}

الشبكة

ضع في اعتبارك المعلومات التالية عند تحديد الشبكات لوحدات IoT Edge النمطية.

  • HostPort المواصفات مطلوبة لعرض خدمة داخل وخارج نظام المجموعة.
    • خيارات K8sExperimental للحد من تعرض الخدمة للمجموعة فقط.
  • يتطلب اتصال الوحدة النمطية بين المواصفات HostPort والاتصال باستخدام المنفذ المعين (وعدم استخدام المنفذ المكشوف للحاوية).
  • تعمل شبكة المضيف مع dnsPolicy = ClusterFirstWithHostNet، مع أن جميع الحاويات (خاصة edgeHub) لا يجب أن تكون على الشبكة المضيفة أيضا.
  • إضافة تعيينات المنفذ ل TCP، لا يعمل UDP في نفس الطلب.

مثال - الوصول الخارجي إلى الوحدات النمطية

بالنسبة لأي وحدات IoT Edge تحدد روابط المنفذ، يتم تعيين عنوان IP باستخدام نطاق IP للخدمة الخارجية Kubernetes الذي تم تحديده في واجهة المستخدم المحلية للجهاز. لا توجد تغييرات على خيارات إنشاء الحاوية بين IoT Edge على docker مقابل IoT Edge على Kubernetes كما هو موضح في المثال التالي.

{
    "HostConfig": {
        "PortBindings": {
            "5000/tcp": [
                {
                    "HostPort": "5000"
                }
            ]
        }
    }
}

ومع ذلك، للاستعلام عن عنوان IP المعين للوحدة النمطية الخاصة بك، يمكنك استخدام لوحة معلومات Kubernetes كما هو موضح في الحصول على عنوان IP للخدمات أو الوحدات النمطية.

بدلا من ذلك، يمكنك الاتصال بواجهة PowerShell للجهاز واستخدام iotedge أمر القائمة لسرد جميع الوحدات النمطية التي تعمل على جهازك. سيشير إخراج الأمر أيضا إلى عناوين IP الخارجية المقترنة بالوحدة النمطية.

استخدام الموارد

مع إعدادات IoT Edge المستندة إلى Kubernetes على أجهزة GPU، يتم تحديد الموارد مثل تسريع الأجهزة والذاكرة ومتطلبات وحدة المعالجة المركزية بشكل مختلف عن أجهزة FPGA.

حساب استخدام التسريع

لنشر الوحدات النمطية على FPGA، استخدم خيارات إنشاء الحاوية كما هو موضح في التكوين التالي:

{
    "HostConfig": {
    "Privileged": true,
    "PortBindings": {
        "50051/tcp": [
        {
            "HostPort": "50051"
        }
        ]
    }
    },
    "k8s-experimental": {
    "resources": {
        "limits": {
        "microsoft.com/fpga_catapult": 2
        },
        "requests": {
        "microsoft.com/fpga_catapult": 2
        }
    }
    },
    "Env": [
    "WIRESERVER_ADDRESS=10.139.218.1"
    ]
}

بالنسبة إلى GPU، استخدم مواصفات طلب الموارد بدلا من روابط الأجهزة كما هو موضح في التكوين الأدنى التالي. تطلب موارد nvidia بدلا من المنجنيق، ولا تحتاج إلى تحديد wireserver.

{
    "HostConfig": {
    "Privileged": true,
    "PortBindings": {
        "50051/tcp": [
        {
            "HostPort": "50051"
        }
        ]
    }
    },
    "k8s-experimental": {
    "resources": {
        "limits": {
        "nvidia.com/gpu": 2
        }    
    }
}

استخدام الذاكرة والمعالج

لتعيين الذاكرة واستخدام وحدة المعالجة المركزية، استخدم حدود المعالج للوحدات النمطية في k8s-experimental القسم .

    "k8s-experimental": {
    "resources": {
        "limits": {
            "memory": "128Mi",
            "cpu": "500m",
            "nvidia.com/gpu": 2
        },
        "requests": {
            "nvidia.com/gpu": 2
        }
}

الذاكرة ومواصفات وحدة المعالجة المركزية ليست ضرورية ولكنها ممارسة جيدة بشكل عام. إذا requests لم يتم تحديد، يتم استخدام القيم المحددة في الحدود كحد أدنى مطلوب.

يتطلب استخدام الذاكرة المشتركة للوحدات النمطية أيضا طريقة مختلفة. على سبيل المثال، يمكنك استخدام وضع المضيف IPC للوصول إلى الذاكرة المشتركة بين تحليلات الفيديو المباشرة وحلول الاستدلال كما هو موضح في نشر تحليلات الفيديو المباشر على Azure Stack Edge.

وكيل ويب

ضع في اعتبارك المعلومات التالية عند تكوين وكيل الويب:

إذا كان لديك وكيل ويب تم تكوينه في شبكتك، فقم بتكوين متغيرات البيئة التالية للنشر edgeHub على إعداد IoT Edge المستند إلى docker على أجهزة FPGA:

  • https_proxy : <proxy URL>
  • UpstreamProtocol : AmqpWs (ما لم يسمح وكيل الويب بحركة Amqp المرور)

بالنسبة لإعدادات IoT Edge المستندة إلى Kubernetes على أجهزة GPU، ستحتاج إلى تكوين هذا المتغير الإضافي أثناء النشر:

  • no_proxy: المضيف المحلي

  • يستخدم وكيل IoT Edge على منصة Kubernetes المنفذ 35000 و35001. تأكد من أن الوحدة النمطية الخاصة بك لا تعمل في هذه المنافذ أو قد تتسبب في تعارضات في المنفذ.

اختلافات أخرى

  • استراتيجية التوزيع: قد تحتاج إلى تغيير سلوك النشر لأي تحديثات للوحدة النمطية. السلوك الافتراضي لوحدات IoT Edge هو التحديث المتداول. يمنع هذا السلوك الوحدة النمطية المحدثة من إعادة التشغيل إذا كانت الوحدة النمطية تستخدم موارد مثل تسريع الأجهزة أو منافذ الشبكة. يمكن أن يكون لهذا السلوك تأثيرات غير متوقعة، خاصة عند التعامل مع وحدات التخزين المستمرة على النظام الأساسي Kubernetes لأجهزة GPU. لتجاوز هذا السلوك الافتراضي، يمكنك تحديد Recreate في القسم في k8s-experimental الوحدة النمطية الخاصة بك.

    {
      "k8s-experimental": {
        "strategy": {
          "type": "Recreate"
        }
      }
    }
    
  • أسماء الوحدات النمطية: يجب أن تتبع أسماء الوحدات النمطية اصطلاحات تسمية Kubernetes. قد تحتاج إلى إعادة تسمية الوحدات النمطية التي تعمل على IoT Edge مع Docker عند نقل هذه الوحدات النمطية إلى IoT Edge باستخدام Kubernetes. لمزيد من المعلومات حول التسمية، راجع اصطلاحات تسمية Kubernetes.

  • خيارات أخرى:

    • بعض خيارات إنشاء docker التي عملت على أجهزة FPGA لن تعمل في بيئة Kubernetes على أجهزة GPU الخاصة بك. على سبيل المثال: ، مثل – EntryPoint.
    • يجب استبدال متغيرات البيئة مثل : ب __.
    • تؤدي حالة إنشاء الحاوية لوحدة Kubernetes إلى حالة التراجع لوحدة نمطية على مورد IoT Hub. في حين أن هناك عددا من الأسباب لوجود الجراب في هذه الحالة، فإن السبب الشائع هو عندما يتم سحب صورة حاوية كبيرة عبر اتصال عرض نطاق ترددي منخفض للشبكة. عندما تكون الحاوية في هذه الحالة، تظهر حالة الوحدة النمطية كتراجع في IOT Hub على الرغم من أن الوحدة بدأت للتو.

الخطوات التالية