giriiş
Üretim, lojistik ve enerji sektörlerindeki müşteriler, uçta makine öğrenimi (ML) modellerini çalıştırma ihtiyacı mevzusunda çoğu zaman katı gereksinimlere haizdir. Bu gereksinimlerden bazıları, düşük gecikmeli işleme, internete zayıf yada asla bağlantı olmaması ve veri güvenliğidir. Veriler süratli, mahalli ve hususi olarak işlenebildiğinden, bu müşteriler için makine öğrenimi süreçlerini uçta çalıştırmak, bu tarz şeyleri bulutta çalıştırmaya gore birçok avantaj sunar. Derin öğrenmeye dayalı makine öğrenimi modelleri için GPU tabanlı uç cihazlar, uçta çalışan makine öğrenimi modellerini geliştirebilir.
AWS IoT Greengrass, uç cihazların yönetilmesine ve bu cihazlara makine öğrenimi modellerinin dağıtılmasına destek olabilir. Bu gönderide, Ultralytics’ten GPLv3 lisansı altında dağıtılan YOLOv8 modellerinin NVIDIA tabanlı uç cihazlarda iyi mi dağıtılacağını ve çalıştırılacağını gösteriyoruz. Bilhassa, PyTorch ve TensorRT benzer biçimde çeşitli makine öğrenimi kitaplıklarıyla derlenmiş YOLOv8 modelleriyle kıyaslamaları kontrol etmek ve çalıştırmak için NVIDIA Jetson Orin™ NX 16GB modülüne dayalı Seeed Studio’nun reComputer J4012’sini kullanıyoruz. Bu değişik YOLOv8 model formatlarının performansını reComputer J4012’de sergileyeceğiz. AWS IoT Greengrass bileşenleri, modelleri ve çıkarım kodunu uç cihazlara dağıtmak için verimli bir yol sağlar. Çıkarım, MQTT mesajları kullanılarak başlatılır ve çıkarım çıktısı, MQTT mevzularına abone olunarak da elde edilir. YOLOv8’i bulutta barındırmakla ilgilenen müşteriler için, YOLOv8’in Amazon SageMaker uç noktalarında iyi mi barındırılacağını gösteren bir blogumuz var.
Çözüme genel bakış
Aşağıdaki diyagram, çözümün genel AWS mimarisini göstermektedir. Seeed Studio’nun reComputer J4012’si, AWS IoT Core kullanılarak bir AWS IoT Thing olarak sağlanır ve bir kameraya bağlanır. Bir geliştirici aşağıdakileri oluşturabilir ve yayınlayabilir: com.aws.yolov8.inference
Çevrelerinden AWS IoT Core’a Greengrass bileşeni. Bileşen yayınlandıktan sonrasında tanımlanan uç cihaza dağıtılabilir ve bileşen için mesajlaşma, AWS IoT konsolu kullanılarak MQTT vasıtasıyla yönetilir. Uç aygıt yayınlandıktan sonrasında çıkarım çalıştırır ve MQTT kullanarak çıktıları AWS IoT çekirdeğine geri yayınlar.
Önkoşullar
izlenecek yol
1. Adım: Edge cihazını kurun
Burada, uç aygıt reComputer J4012 cihazını lüzumlu kitaplık bağımlılıklarını yükleyerek, aleti maksimum güç moduna ayarlayarak ve aleti AWS IoT Greengrass ile yapılandırarak doğru şekilde yapılandırma adımlarını açıklayacağız. Şu anda reComputer J4012, JetPack 5.1 ve CUDA 11.4 ile evvel yüklenmiş olarak gelir ve varsayılan olarak, reComputer J4012’deki JetPack 5.1 sistemi maksimum güç modunda çalışacak şekilde yapılandırılmamıştır. Adım 1.1 ve 1.2’de, öteki lüzumlu bağımlılıkları kuracağız ve aleti maksimum güç moduna geçireceğiz. Son olarak Adım 1.3’te, uç cihazın AWS IoT Core’a güvenli bir halde bağlanabilmesi ve öteki AWS hizmetleriyle yazışma kurabilmesi için aleti AWS IoT Greengrass’ta tedarik edeceğiz.
Adım 1.1: Bağımlılıkları kurun
- Edge cihazındaki terminalden, aşağıdaki komutu kullanarak GitHub deposunu klonlayın:
$ git clone https://github.com/aws-samples/deploy-yolov8-on-edge-using-aws-iot-greengrass
- utils dizinine gidin ve install_dependencies.sh betiğini aşağıda gösterildiği benzer biçimde çalıştırın:
$ cd deploy-yolov8-on-edge-using-aws-iot-greengrass/utils/ $ chmod u+x install_dependencies.sh $ ./install_dependencies.sh
Adım 1.2: Edge cihazını maksimum güç moduna ayarlayın
- Edge aletinin terminalinden maksimum güç moduna geçmek için aşağıdaki komutları çalıştırın:
$ sudo nvpmodel -m 0 $ sudo jetson_clocks
- Yukarıdaki değişimleri uygulamak için lütfen yukarıdaki komutları çalıştırdıktan sonrasında istendiğinde ‘evet’ yazarak aleti tekrardan başlatın.
Adım 1.3: Uç aleti IoT Greengrass ile kurun
- Cihazın otomatik provizyonu için reComputer J4012 terminalinden aşağıdaki komutları çalıştırın:
$ cd deploy-yolov8-on-edge-using-aws-iot-greengrass/utils/ $ chmod u+x provisioning.sh $ ./provisioning.sh
- (isteğe bağlı) Cihazın manuel olarak sağlanması için AWS genel belgelerinde açıklanan prosedürleri izleyin. Bu belgeler, aygıt kaydı, kimlik doğrulama ve güvenlik kurulumu, güvenli yazışma yapılandırması, IoT Thing oluşturma, siyaset ve izin kurulumu benzer biçimde süreçleri adım adım anlatacaktır.
- istendiğinde Nesnelerin İnterneti Ve IoT Şey Grubu, lütfen cihazlarınız için benzersiz adlar girin. Aksi takdirde, varsayılan değerlerle (GreengrassThing ve GreengrassThingGroup) adlandırılırlar.
- Yapılandırıldıktan sonrasında bu öğeler, aşağıdaki şekillerde gösterildiği benzer biçimde AWS IoT Core konsolunda görünür olacaktır:
2. Adım: Edge cihazındaki modelleri indirin/dönüştürün
Burada, YOLOv8 PyTorch modellerinin 3 ana kategorisine odaklanacağız: Tespit, Segmentasyon ve Sınıflandırma. Her bir model görevi, performans ve karmaşıklığa dayalı olarak 5 türe ayrılır ve aşağıdaki tabloda özetlenir. Her model türü, modellerin boyutlarına gore “Nano” (düşük gecikme süresi, düşük doğruluk) ile “Extra Büyük” (yüksek gecikme süresi, yüksek doğruluk) içinde değişmiş olur.
model türleri | Tespit etme | segmentasyon | sınıflandırma |
---|---|---|---|
Nano | yolov8n | yolov8n-seg | yolov8n-cls |
Ufak | yolov8s | yolov8s-seg | yolov8s-cls |
Orta | yolov8m | yolov8m-seg | yolov8m-cls |
Büyük | yolov8l | yolov8l-seg | yolov8l-cls |
Extra büyük | yolov8x | yolov8x-seg | yolov8x-cls |
ONNX ve TensorRT çerçevelerine dönüştürülen uç cihazdaki varsayılan PyTorch modellerinin iyi mi indirileceğini göstereceğiz.
Adım 2.1: PyTorch temel modellerini indirin
- reComputer J4012 terminalinden yolu değiştirin.
edge/device/path/to/models
modelleri indirmek istediğiniz yola gidin ve ortamı yapılandırmak için aşağıdaki komutları çalıştırın:$ echo 'export PATH="/home/$USER/.local/bin:$PATH"' >> ~/.bashrc $ source ~/.bashrc $ cd {edge/device/path/to/models} $ MODEL_HEIGHT=480 $ MODEL_WIDTH=640
- PyTorch temel modellerini indirmek için reComputer J4012 terminalinde aşağıdaki komutları çalıştırın:
$ yolo export model=[yolov8n.pt OR yolov8n-seg.pt OR yolov8n-cls.pt] imgsz=$MODEL_HEIGHT,$MODEL_WIDTH
Adım 2.2: Modelleri ONNX ve TensorRT’ye dönüştürün
- Aşağıdaki komutları kullanarak PyTorch modellerini ONNX modellerine dönüştürün:
$ yolo export model=[yolov8n.pt OR yolov8n-seg.pt OR yolov8n-cls.pt] format=onnx imgsz=$MODEL_HEIGHT,$MODEL_WIDTH
- Aşağıdaki komutları kullanarak ONNX modellerini TensorRT modellerine dönüştürün:
[Convert YOLOv8 ONNX Models to TensorRT Models]
$ echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/targets/aarch64-linux/lib' >> ~/.bashrc
$ echo 'alias trtexec="/usr/src/tensorrt/bin/trtexec"' >> ~/.bashrc<br />$ source ~/.bashrc
$ trtexec --onnx={absolute/path/edge/device/path/to/models}/yolov8n.onnx --saveEngine={absolute/path/edge/device/path/to/models}/yolov8n.trt
3. Adım: Mahalli makineyi yada EC2 bulut sunucusunu kurun ve uç cihazda çıkarımı çalıştırın
Burada, bileşeni mahalli bir makinede oluşturmak, AWS IoT Core’da yayınlamak, uç cihaza dağıtmak ve AWS IoT konsolunu kullanarak çıkarım yapmak için Greengrass Geliştirme Kiti’nin (GDK) iyi mi kullanılacağını göstereceğiz. Bileşen, makine öğrenimi modelini yüklemekten, çıkarımı çalıştırmaktan ve MQTT kullanarak çıktıyı AWS IoT Core’a yayınlamaktan mesuldür. Çıkarım bileşeninin uç cihaza konuşlandırılması için çıkarım kodunun bir Greengrass bileşenine dönüştürülmesi gerekir. Bu, Amazon Simple Storage Service (S3) izinleriyle bağlantılı AWS kimlik detayları ve IAM politikalarıyla yapılandırılmış bir mahalli makinede yada Amazon Elastic Compute Cloud (EC2) örneğinde yapılabilir.
Adım 3.1: Mahalli bir makineden yada EC2 bulut sunucusundan uç cihaza bileşen oluşturun/Yayınlayın/dağıtın
- Mahalli makineden yada EC2 bulut sunucusu terminalinden GitHub deposunu klonlayın ve ortamı yapılandırın:
$ git clone https://github.com/aws-samples/deploy-yolov8-on-edge-using-aws-iot-greengrass $ export AWS_ACCOUNT_NUM="ADD_ACCOUNT_NUMBER" $ export AWS_REGION="ADD_REGION" $ export DEV_IOT_THING="NAME_OF_OF_THING" $ export DEV_IOT_THING_GROUP="NAME_OF_IOT_THING_GROUP"
- Açık
recipe.json
altındacomponents/com.aws.yolov8.inference
dizini ve içindeki öğeleri değiştirinConfiguration
. Burada,model_loc
modelin, Adım 2.1’de tanımlanan uç cihazdaki konumudur:"Configuration": { "event_topic": "inference/input", "output_topic": "inference/output", "camera_id": "0", "model_loc": "edge/device/path/to/yolov8n.pt" OR " edge/device/path/to/models/yolov8n.trt" }
- Terminalde aşağıdaki komutları çalıştırarak GDK’yı mahalli makineye yada EC2 bulut sunucusuna kurun:
$ python3 -m pip install -U git+https://github.com/aws-greengrass/aws-greengrass-gdk-cli.git@v1.2.0 $ [For Linux] apt-get install jq $ [For MacOS] brew install jq
- çalıştırarak bileşeni otomatikman oluşturun, yayınlayın ve devreye alın.
deploy-gdk-build.sh
mahalli makinedeki yada EC2 örneğindeki utils dizinindeki komut dosyası:$ cd utils/ $ chmod u+x deploy-gdk-build.sh $ ./deploy-gdk-build.sh
Adım 3.2: AWS IoT Core kullanarak çıkarım çalıştırın
Burada, modelleri çalıştırmak ve çıktıları almak için AWS IoT Core konsolunun iyi mi kullanılacağını göstereceğiz. Model seçimi kesinlikle bu bölümde yapılmalıdır. recipe.json
mahalli makinenizde yada EC2 bulut sunucunuzda ve kullanılarak tekrardan dağıtılması gerekecek deploy-gdk-build.sh
senaryo. Çıkarım başladıktan sonrasında uç aygıt, model çerçevesini belirleyecek ve iş yükünü buna gore çalıştıracaktır. Edge cihazında üretilen çıktı, MQTT kullanılarak buluta aktarılır ve mevzuya abone olunduğunda görüntülenebilir. Aşağıdaki biçim, çıkarım süre damgasını, model tipini, emek verme zamanını, saniyedeki kare sayısını ve model formatını gösterir.
AWS Konsolunda MQTT mesajlarını görüntülemek için aşağıdakileri yapın:
- AWS IoT Core Console’da, soldaki menüde Kontrol altında MQTT kontrol istemcisi’ni seçin. İçinde bir mevzuya abone ol sekmesinde mevzuyu girin
inference/output
ve arkasından Abone ol’u seçin. - İçinde Bir mevzuya yayınla sekmesinde mevzuyu girin
inference/input
ve arkasından Bildiri Yükü olarak aşağıdaki JSON’u girin. Çıkarımı başlatmak/duraklatmak/durdurmak için durumu başlatmak, duraklatmak yada durdurmak suretiyle değiştirin:{ "status": "start" }
- Çıkarım başladığında, çıktının konsola geri döndüğünü görebilirsiniz.
Seeed Studio reComputer J4012’de YOLOv8 ile Karşılaştırma
Değişik YOLOv8 modellerinin makine öğrenimi emek verme zamanlarını reComputer J4012 üstünde karşılaştırdık ve sonuçlar aşağıda özetlendi. Modeller bir kontrol videosu üstünde çalıştırıldı ve değişik model formatları ve giriş şekilleri için gecikme ölçümleri elde edildi. İlginç bir halde, PyTorch model emek verme zamanları, değişik model giriş boyutlarında oldukça fazla değişmezken, TensorRT azaltılmış giriş şekli ile emek verme zamanında belirgin bir gelişme gösterdi. PyTorch emek verme zamanlarında değişim olmamasının sebebi, PyTorch modelinin giriş şekillerini tekrardan boyutlandırmaması, bunun yerine görüntü şekillerini 640×640 olan model giriş şekline uyacak şekilde değiştirmesidir.
Girdi boyutlarına ve model türüne bağlı olarak, TensorRT derlenmiş modelleri, PyTorch modellerine gore daha iyi performans gösterdi. Extra dolgu sebebiyle model giriş şekli azaltıldığında, PyTorch modellerinin gecikme performansında düşüş olduğu görülüyor. TensorRT’ye derlerken, dolguyu kaldıran model girişi aslına bakarsanız dikkate alınır ve bu yüzden azaltılmış giriş şekliyle daha iyi performans gösterirler. Aşağıdaki tablo, Idrak etme ve Segmentasyon çalıştıran PyTorch ve TensorRT modellerini kullanan değişik girdi şekilleri için gecikme karşılaştırma ölçütlerini (ön işleme, çıkarım ve işleme sonrası) özetlemektedir. Sonuçlar, değişik model formatları ve girdi şekilleri için emek verme zamanını milisaniye cinsinden gösterir. Ham çıkarım emek verme sürelerine ilişkin sonuçlar için lütfen Seeed Studio’nun blog gönderisinde gösterilen karşılaştırma sonuçlarına bakın.
model girişi | Idrak etme – YOLOv8n (ms) | Segmentasyon – YOLOv8n-seg (ms) | ||
---|---|---|---|---|
[H x W] | PyTorch | TensorRT | PyTorch | TensorRT |
[640 x 640] | 27.54 | 25.65 | 32.05 | 29.25 |
[480 x 640] | 23.16 | 19.86 | 24.65 | 23.07 |
[320 x 320] | 29.77 | 8.68 | 34.28 | 10.83 |
[224 x 224] | 29.45 | 5.73 | 31.73 | 7.43 |
Temizlemek
Kullanılmayan Greengrass bileşenleri ve dağıtımları toplam maliyeti artırmazken, MQTT mesajları kullanılarak açıklanmış olduğu benzer biçimde uç cihazdaki çıkarım kodunu kapatmak ideal olarak iyi bir uygulamadır. GitHub deposu, dağıtımı iptal etmek için otomatik bir komut dosyası da sağlar. Aynı komut dosyası, aşağıda gösterildiği benzer biçimde kullanılmayan dağıtımların ve bileşenlerin silinmesine de destek verir:
- Adım 3.1’de kullanılan aynı değişkenleri kullanarak mahalli makineden yada EC2 örneğinden ortam değişkenlerini tekrardan yapılandırın:
$ export AWS_ACCOUNT_NUM="ADD_ACCOUNT_NUMBER" $ export AWS_REGION="ADD_REGION" $ export DEV_IOT_THING="NAME_OF_OF_THING" $ export DEV_IOT_THING_GROUP="NAME_OF_IOT_THING_GROUP"
- Mahalli makineden yada EC2 örneğinden utils dizinine gidin ve çalıştırın
cleanup_gg.py
senaryo:$ cd utils/ $ python3 cleanup_gg.py
Çözüm
Bu gönderide, YOLOv8 modellerinin Seeed Studio’nun reComputer J4012 aletine iyi mi dağıtılacağını ve AWS IoT Greengrass bileşenlerini kullanarak çıkarımların iyi mi çalıştırılacağını gösterdik. Ek olarak, reComputer J4012 aletinin performansını model boyutu, türü ve görüntü boyutu benzer biçimde çeşitli model yapılandırmalarıyla karşılaştırdık. Tesislerinizde meydana gelenleri izlemenize ve izlemenize olanak tanıyan uçta çalışırken modellerin neredeyse gerçek zamanlı performansını gösterdik. Ek olarak AWS IoT Greengrass’ın IoT uç cihazlarını yönetme, makine öğrenimi modellerini dağıtma ve uçta çıkarım çalıştırmayla ilgili birçok sıkıntılı noktayı iyi mi hafiflettiğini de paylaştık.
AWS Ustalaşmış Hizmetler ekibimizin uçta bilgisayar görme modellerini yapılandırma ve dağıtma mevzusunda iyi mi destek olabileceğiyle ilgili sorularınız için lütfen web sitemizi ziyaret edin.
Seeed Studio Hakkında
Ilk olarak kontrol için AWS Greengrass sertifikalı reComputer J4012 cihazını bizlere elde eden Seeed Studio’daki iş ortaklarımıza teşekkür ederiz. Seeed Studio bir AWS İş Ortağıdır ve donanımı daha erişilebilir hale getirme ve donanım yeniliği eşiğini düşürme misyonuyla açık teknoloji ve çevik üretim hizmetleri sağlayarak 2008’den beri küresel geliştirici topluluğuna hizmet vermektedir. Seeed Studio, NVIDIA’nın Seçkin İş Ortağıdır ve hususi görüntü yanıp sönme hizmeti, filo yönetimi ve donanım özelleştirme dahil olmak suretiyle gömülü çözüm entegrasyonunu basitleştirmek için tek elden bir tecrübe sunar. Seeed Studio, entegrasyon, üretim, yerine getirme ve dağıtım işlemlerini gerçekleştirerek müşteriler için pazara sürüm süresini hızlandırır. NVIDIA Jetson ekosistemi hakkında daha çok data edinin.
Source: aws.amazon.com