Azure Stack Edge Pro GPU cihazında Azure Stack Edge Pro FPGA cihazlarından mevcut IoT Edge modüllerini çalıştırma

ŞUNLAR IÇIN GEÇERLIDIR:Yes for Pro GPU SKUAzure Stack Edge Pro - GPUYes for Pro R SKUAzure Stack Edge Pro R

Dekont

Linux VM'sinde en son IoT Edge sürümünü dağıtmanızı kesinlikle öneririz. Azure Stack Edge'de yönetilen IoT Edge, ioT Edge çalışma zamanının en son özelliklere ve yamalara sahip olmayan eski bir sürümünü kullanır. Yönergeler için bkz . Ubuntu VM dağıtma. IoT Edge çalıştırabilen diğer desteklenen Linux dağıtımları hakkında daha fazla bilgi için bkz . Azure IoT Edge tarafından desteklenen sistemler – Kapsayıcı altyapıları.

Bu makalede, Azure Stack Edge Pro GPU cihazında Kubernetes tabanlı bir IoT Edge platformunda çalışabilmesi için Azure Stack Edge Pro FPGA üzerinde çalışan docker tabanlı IoT Edge modülü için gereken değişiklikler açıklanır.

IoT Edge uygulaması hakkında

IoT Edge uygulaması, Azure Stack Edge Pro FPGA cihazlarında ve Azure Stack Edge Pro GPU cihazlarında olandan farklıdır. GPU cihazları için Kubernetes, IoT Edge için bir barındırma platformu olarak kullanılır. FPGA cihazlarında IoT Edge, docker tabanlı bir platform kullanır. IoT Edge docker tabanlı uygulama modeli otomatik olarak Kubernetes yerel uygulama modeline çevrilir. Ancak Kubernetes uygulama modelinin yalnızca küçük bir alt kümesi desteklendiğinden bazı değişiklikler gerekebilir.

İş yüklerinizi bir FPGA cihazından GPU cihazına geçiriyorsanız, Kubernetes platformunda başarılı bir şekilde çalıştırılacak olanlar için mevcut IoT Edge modüllerinde değişiklik yapmanız gerekir. Depolama, ağ, kaynak kullanımı ve web proxy gereksinimlerinizi farklı şekilde belirtmeniz gerekebilir.

Depolama

IoT Edge modülleri için depolama alanı belirtirken aşağıdaki bilgileri göz önünde bulundurun.

  • Kubernetes üzerindeki kapsayıcılar için Depolama birim bağlamaları kullanılarak belirtilir.
  • Kubernetes'te dağıtım, kalıcı depolama veya konak yollarını ilişkilendirmek için bağlamalara sahip olamaz.
    • Kalıcı depolama için türüyle volumekullanınMounts.
    • Konak yolları için türüyle bindkullanınMounts.
  • Kubernetes'te IoT Edge için bağlama Mounts , dosya için değil yalnızca dizin için çalışır.

Örnek - Birim bağlamaları aracılığıyla Depolama

Docker üzerinde IoT Edge için, cihazdaki paylaşımları kapsayıcı içindeki yollara eşlemek için konak yolu bağlamaları kullanılır. FPGA cihazlarında kullanılan kapsayıcı oluşturma seçenekleri şunlardır:

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

Kubernetes'te IoT Edge'in konak yolları için tür bind ile kullanma Mounts örneği burada gösterilmiştir:

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

Kubernetes üzerinde IoT Edge çalıştıran GPU cihazları için depolamayı belirtmek için birim bağlamaları kullanılır. Paylaşımları kullanarak depolama sağlamak için değeri Mounts.Source , GPU cihazınızda sağlanan SMB veya NFS paylaşımının adı olabilir. /home/input, kapsayıcı içinde birimin erişilebilir olduğu yoldur. GPU cihazlarında kullanılan kapsayıcı oluşturma seçenekleri şunlardır:

{
    "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 modülleri için ağ belirtirken aşağıdaki bilgileri göz önünde bulundurun.

  • HostPort belirtimi, bir hizmeti kümenin içinde ve dışında kullanıma açmak için gereklidir.
    • K8s Hizmetin yalnızca kümeye açık olmasını sınırlamak için deneyimsel seçenekler.
  • Modüller HostPort arası iletişim için belirtim ve eşlenmiş bağlantı noktası kullanılarak bağlantı gerekir (kapsayıcının kullanıma sunulduğu bağlantı noktasını kullanmaz).
  • Konak ağı ile dnsPolicy = ClusterFirstWithHostNetçalışır ve tüm kapsayıcıların (özellikle edgeHub) konak ağında da olması gerekmez.
  • TCP için bağlantı noktası eşlemeleri ekleme, aynı istekteki UDP çalışmaz.

Örnek - Modüllere dış erişim

Bağlantı noktası bağlamalarını belirten tüm IoT Edge modülleri için, cihazın yerel kullanıcı arabiriminde belirtilen Kubernetes dış hizmet IP aralığı kullanılarak bir IP adresi atanır. Aşağıdaki örnekte gösterildiği gibi docker üzerinde IoT Edge ile Kubernetes'teki IoT Edge arasında kapsayıcı oluşturma seçeneklerinde hiçbir değişiklik yoktur.

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

Ancak, modülünüze atanan IP adresini sorgulamak için Hizmetler veya modüller için IP adresi alma bölümünde açıklandığı gibi Kubernetes panosunu kullanabilirsiniz.

Alternatif olarak, cihazın PowerShell arabirimine Bağlan ve liste komutunu kullanarak cihazınızda çalışan tüm modülleri listeleyebilirsiniziotedge. Komut çıkışı, modülle ilişkilendirilmiş dış IP'leri de gösterir.

Kaynak kullanımı

GPU cihazlarında Kubernetes tabanlı IoT Edge kurulumlarıyla donanım hızlandırma, bellek ve CPU gereksinimleri gibi kaynaklar FPGA cihazlarından farklı şekilde belirtilir.

İşlem hızlandırma kullanımı

Modülleri FPGA'da dağıtmak için aşağıdaki yapılandırmada gösterildiği gibi kapsayıcı oluşturma seçeneklerini kullanın:

{
    "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 için, aşağıdaki minimum yapılandırmada gösterildiği gibi Cihaz Bağlamaları yerine kaynak isteği belirtimlerini kullanın. Mancınık yerine nvidia kaynakları istiyorsunuz ve belirtmeniz wireservergerekmiyor.

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

Bellek ve CPU kullanımı

Bellek ve CPU kullanımını ayarlamak için bölümündeki modüller k8s-experimental için işlemci sınırlarını kullanın.

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

Bellek ve CPU belirtimi gerekli değildir, ancak genellikle iyi bir uygulamadır. Belirtilmezse requests , sınırlar içinde ayarlanan değerler gereken en düşük değer olarak kullanılır.

Modüller için paylaşılan belleğin kullanılması da farklı bir yol gerektirir. Örneğin, Azure Stack Edge'de Canlı Video Analizi dağıtma bölümünde açıklandığı gibi Canlı Video Analizi ve Çıkarım çözümleri arasında paylaşılan bellek erişimi için Ana Bilgisayar IPC modunu kullanabilirsiniz.

Web ara sunucusu

Web proxy'sini yapılandırırken aşağıdaki bilgileri göz önünde bulundurun:

Ağınızda yapılandırılmış web proxy'niz varsa, FPGA cihazlarında docker tabanlı IoT Edge kurulumunuzda dağıtım için edgeHub aşağıdaki ortam değişkenlerini yapılandırın:

  • https_proxy : <proxy URL>
  • UpstreamProtocol : AmqpWs (web ara sunucusu trafiğe izin vermediği Amqp sürece)

GPU cihazlarında Kubernetes tabanlı IoT Edge kurulumları için dağıtım sırasında bu ek değişkeni yapılandırmanız gerekir:

  • no_proxy:Localhost

  • Kubernetes platformundaki IoT Edge proxy'si 35000 ve 35001 numaralı bağlantı noktalarını kullanır. Modülünüzün bu bağlantı noktalarında çalışmadığından veya bağlantı noktası çakışmalarına neden olabileceğine emin olun.

Diğer farklılıklar

  • Dağıtım stratejisi: Modüldeki tüm güncelleştirmeler için dağıtım davranışını değiştirmeniz gerekebilir. IoT Edge modülleri için varsayılan davranış sıralı güncelleştirmedir. Bu davranış, modül donanım hızlandırma veya ağ bağlantı noktaları gibi kaynaklar kullanıyorsa güncelleştirilmiş modülün yeniden başlatılmasını engeller. Bu davranış, özellikle GPU cihazları için Kubernetes platformundaki kalıcı birimlerle ilgilenirken beklenmeyen etkilere neden olabilir. Bu varsayılan davranışı geçersiz kılmak için modülünüzün bölümünde bir Recreatek8s-experimental belirtebilirsiniz.

    {
      "k8s-experimental": {
        "strategy": {
          "type": "Recreate"
        }
      }
    }
    
  • Modül adları: Modül adları Kubernetes adlandırma kurallarına uygun olmalıdır. Bu modülleri Kubernetes ile IoT Edge'e taşıdığınızda Docker ile IoT Edge'de çalışan modülleri yeniden adlandırmanız gerekebilir. Adlandırma hakkında daha fazla bilgi için bkz . Kubernetes adlandırma kuralları.

  • Diğer seçenekler:

    • FPGA cihazlarında çalışan bazı Docker oluşturma seçenekleri GPU cihazlarınızdaki Kubernetes ortamında çalışmaz. Örneğin: , gibi – EntryPoint.
    • gibi : ortam değişkenlerinin ile __değiştirilmesi gerekir.
    • Kubernetes podu için Kapsayıcı Oluşturma durumu, IoT Hub kaynağındaki bir modülün geri çekilme durumuna yol açar. Podun bu durumda olmasının çeşitli nedenleri olsa da, yaygın bir neden, büyük bir kapsayıcı görüntüsünün düşük ağ bant genişliği bağlantısı üzerinden çekilmesidir. Pod bu durumdayken modülün durumu IOT Hub'da geri alma olarak görünür ancak modül yeni başlatılıyordur.

Sonraki adımlar

  • Gpu'ya modül kullanmak üzere yapılandırma hakkında daha fazla bilgi edinin.