Zephyrnet Logosu

Amazon SageMaker JumpStart'ı kullanarak 5G uç ile AWS Wavelength'te önceden eğitilmiş modeller dağıtın

Tarih:

Yüksek hızlı 5G mobil ağların ortaya çıkmasıyla birlikte, işletmeler telekomünikasyon ağlarının ve bulutun yakınsamasından yararlanma fırsatıyla her zamankinden daha kolay konumlanıyor. Bugüne kadarki en belirgin kullanım durumlarından biri olan uçta makine öğrenimi (ML), kuruluşların gecikmeyi azaltmak ve uygulamalarının yanıt verebilirliğini artırmak için son müşterilerine daha yakın makine öğrenimi modelleri dağıtmasına olanak sağlamıştır. Örnek olarak, akıllı mekan çözümleri 5G ağları üzerinden kalabalık analitiği için gerçek zamanlıya yakın bilgisayar görüşünü kullanabilir ve şirket içi donanım ağ ekipmanına yapılan yatırımı en aza indirebilir. Perakendeciler, doğal dil işleme (NLP), gerçek zamanlı öneri sistemleri ve dolandırıcılık tespiti ile hareket halindeyken daha sorunsuz deneyimler sunabilir. Eşit yer ve hava robotları daha güvenli, daha otonom operasyonların kilidini açmak için makine öğrenimini kullanabilir.

Uçta makine öğrenimine giriş engelini azaltmak için, önceden eğitilmiş bir modelin dağıtılmasına ilişkin bir örnek göstermek istedik. Amazon Adaçayı Yapıcı için AWS Dalgaboyu, tümü 100'den az kod satırında. Bu gönderide, 5G ağ tabanlı uygulamalar için model çıkarım gecikmesini azaltmak amacıyla bir SageMaker modelini AWS Wavelength'e nasıl dağıtacağımızı gösteriyoruz.

Çözüme genel bakış

AWS'nin hızla genişleyen küresel altyapısı genelinde AWS Wavelength, bulut bilgi işlem ve depolamanın gücünü 5G ağlarının ucuna taşıyarak daha performanslı mobil deneyimlerin kilidini açar. AWS Wavelength ile sanal özel bulutunuzu (VPC), telekomünikasyon taşıyıcısının ağ ucuna karşılık gelen Dalga Boyu Bölgelerine genişletebilirsiniz. 29 şehirleri Dünya çapında. Aşağıdaki diyagram bu mimarinin bir örneğini göstermektedir.

AWS Dalga Boyu Referans Mimarisi

Belirli bir Bölgedeki Dalga Boyu Bölgelerini şu şekilde seçebilirsiniz: AWS Yönetim Konsolu ya da AWS Komut Satırı Arayüzü (AWS CLI). AWS Wavelength'te coğrafi olarak dağıtılmış uygulamaları dağıtma hakkında daha fazla bilgi edinmek için bkz. AWS Wavelength üzerinde coğrafi olarak dağıtılmış Amazon EKS kümelerini dağıtın.

Bu gönderide ele alınan temelleri temel alarak, uçta makine öğrenimini AWS Wavelength'e dağıtmak üzere örnek bir iş yükü olarak ele alıyoruz. Örnek iş yükümüz olarak, önceden eğitilmiş bir modeli Amazon SageMaker Hızlı Başlangıç.

SageMaker, geliştiricilerin makine öğrenimi modellerini AWS ortamlarına kolayca dağıtmasına olanak tanıyan, tam olarak yönetilen bir makine öğrenimi hizmetidir. AWS, model eğitimi için bir dizi seçenek sunsa da; AWS Pazar Yeri modeller ve yerleşik SageMaker algoritmaları—açık kaynaklı makine öğrenimi modellerini dağıtmak için bir dizi teknik vardır.

JumpStart, SageMaker uç noktalarına sorunsuz bir şekilde dağıtılabilen önceden eğitilmiş modellerle yüzlerce yerleşik algoritmaya erişim sağlar. Öngörülü bakım ve bilgisayar görüşünden otonom sürüşe ve dolandırıcılık tespitine kadar JumpStart, konsolda tek tıkla devreye alma ile çeşitli popüler kullanım durumlarını destekler.

SageMaker, Dalga Boyu Bölgelerinde yerel olarak desteklenmediğinden, model yapıtlarının Bölgeden nasıl çıkarılacağını ve uca yeniden konuşlandırılacağını gösteriyoruz. Bunu yapmak için Amazon Elastik Kubernetes Hizmeti (Amazon EKS) Wavelength Bölgelerindeki kümeleri ve düğüm gruplarını, ardından JumpStart tarafından oluşturulan kapsayıcı görüntüsüyle bir dağıtım bildirimi oluşturma. Aşağıdaki diyagram bu mimariyi göstermektedir.

AWS Wavelength'te Amazon SageMaker JumpStart için referans mimarisi

Önkoşullar

Bunu olabildiğince kolaylaştırmak için AWS hesabınızda Dalga Boyu Alanlarının etkinleştirildiğinden emin olun. Bu entegrasyonun yalnızca şurada mevcut olduğunu unutmayın: us-east-1 ve us-west-2, ve kullanıyor olacaksınız us-east-1 Demo süresi boyunca.

AWS Wavelength'e kaydolmak için aşağıdaki adımları tamamlayın:

  1. Amazon VPC konsolunda şunu seçin: Bölgeleri altında Ayarlar Ve seç ABD Doğu (Verizon) / us-east-1-wl1.
  2. Klinik Yönet.
  3. seç Etkinleştirildi.
  4. Klinik Bölgeleri güncelle.

AWS Wavelength altyapısı oluşturun

Yerel SageMaker model çıkarım uç noktasını bir Kubernetes dağıtımına dönüştürmeden önce, bir Dalga Boyu Bölgesinde bir EKS kümesi oluşturabilirsiniz. Bunu yapmak için bir AWS Wavelength düğüm grubuyla bir Amazon EKS kümesi dağıtın. Daha fazlasını öğrenmek için ziyaret edebilirsiniz. AWS Containers Blog'daki bu kılavuz or Verizon'un 5GEdgeTutorials deposu böyle bir örnek için.

Daha sonra, bir AWS Bulut9 ortamı veya etkileşimli geliştirme ortamını (IDE) seçin, gerekli SageMaker paketlerini indirin ve Docker Oluşturma, JumpStart'ın önemli bir bağımlılığı.

pip install sagemaker
pip install 'sagemaker[local]' --upgrade
sudo curl -L "https://github.com/docker/compose/releases/download/1.23.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version

JumpStart'ı kullanarak model yapıtları oluşturun

Öncelikle, sahip olduğunuzdan emin olun. AWS Kimlik ve Erişim Yönetimi SageMaker için (IAM) yürütme rolü. Daha fazlasını öğrenmek için ziyaret edin Adaçayı Yapıcı Rolleri.

  1. kullanma bu örnek, önceden oluşturulmuş bir modeli almak için SageMaker Yazılım Geliştirme Kitini (SDK) kullanan train_model.py adlı bir dosya oluşturun (değiştirin SageMaker yürütme rolünüzün Amazon Kaynak Adı (ARN) ile). Bu dosyada, bir modeli yerel olarak dağıtırsınız. instance_type özniteliği model.deploy() tanımladığınız tüm gerekli model yapıtlarını kullanarak IDE'nizde bir Docker kapsayıcısı başlatan işlev:
#train_model.py
from sagemaker import image_uris, model_uris, script_uris
from sagemaker.model import Model
from sagemaker.predictor import Predictor
from sagemaker.utils import name_from_base
import sagemaker, boto3, json
from sagemaker import get_execution_role aws_role = "<your-sagemaker-execution-role>"
aws_region = boto3.Session().region_name
sess = sagemaker.Session() # model_version="*" fetches the latest version of the model.
infer_model_id = "tensorflow-tc-bert-en-uncased-L-12-H-768-A-12-2"
infer_model_version= "*"
endpoint_name = name_from_base(f"jumpstart-example-{infer_model_id}") # Retrieve the inference docker container uri.
deploy_image_uri = image_uris.retrieve(
region=None,
framework=None,
image_scope="inference",
model_id=infer_model_id,
model_version=infer_model_version,
instance_type="local",
)
# Retrieve the inference script uri.
deploy_source_uri = script_uris.retrieve(
model_id=infer_model_id, model_version=infer_model_version, script_scope="inference"
)
# Retrieve the base model uri.
base_model_uri = model_uris.retrieve(
model_id=infer_model_id, model_version=infer_model_version, model_scope="inference"
)
model = Model(
image_uri=deploy_image_uri,
source_dir=deploy_source_uri,
model_data=base_model_uri,
entry_point="inference.py",
role=aws_role,
predictor_cls=Predictor,
name=endpoint_name,
)
print(deploy_image_uri,deploy_source_uri,base_model_uri)
# deploy the Model.
base_model_predictor = model.deploy(
initial_instance_count=1,
instance_type="local",
endpoint_name=endpoint_name,
)

  1. Ardından, ayarla infer_model_id kullanmak istediğiniz SageMaker modelinin kimliğine.

Tam liste için bkz. Önceden eğitilmiş Model Tablosu ile Yerleşik Algoritmalar. Örneğimizde, genellikle doğal dil işleme için kullanılan Transformers'tan Çift Yönlü Kodlayıcı Temsilleri (BERT) modelini kullanıyoruz.

  1. Çalıştır train_model.py JumpStart model yapıtlarını almak ve önceden eğitilmiş modeli yerel makinenize dağıtmak için komut dosyası:
python train_model.py

Bu adım başarılı olursa, çıktınız aşağıdakine benzer:

763104351884.dkr.ecr.us-east-1.amazonaws.com/tensorflow-inference:2.8-cpu
s3://jumpstart-cache-prod-us-east-1/source-directory-tarballs/tensorflow/inference/tc/v2.0.0/sourcedir.tar.gz
s3://jumpstart-cache-prod-us-east-1/tensorflow-infer/v2.0.0/infer-tensorflow-tc-bert-en-uncased-L-12-H-768-A-12-2.tar.gz

Çıktıda sırayla üç yapı göreceksiniz: TensorFlow çıkarımı için temel görüntü, modele hizmet eden çıkarım betiği ve eğitilmiş modeli içeren yapılar. Bu yapılar ile özel bir Docker görüntüsü oluşturabilseniz de başka bir yaklaşım, SageMaker yerel modunun Docker görüntüsünü sizin için oluşturmasına izin vermektir. Sonraki adımlarda, yerel olarak çalışan kapsayıcı görüntüsünü ayıklıyoruz ve şuraya dağıtıyoruz: Amazon Elastik Konteyner Kayıt Defteri (Amazon ECR) oluşturmanın yanı sıra model yapıtını ayrı olarak itin. Amazon Basit Depolama Hizmeti (Amazon S3).

Yerel mod yapıtlarını uzak Kubernetes dağıtımına dönüştürün

Artık SageMaker'ın yerel olarak çalıştığını onayladığınıza göre, çalışan kapsayıcıdan konuşlandırma bildirimini çıkaralım. Aşağıdaki adımları tamamlayın:

SageMaker yerel mod konuşlandırma bildiriminin konumunu tanımlayın: Bunu yapmak için, kök dizinimizde şu adla anılan dosyaları arayın: docker-compose.yaml.

docker_manifest=$( find /tmp/tmp* -name "docker-compose.yaml" -printf '%T+ %pn' | sort | tail -n 1 | cut -d' ' -f2-)
echo $docker_manifest

SageMaker yerel mod model yapılarının konumunu belirleyin: Ardından, yapıyı Amazon s3'e yükledikten sonra her bir EKS çalışan düğümünde kullanılacak olan yerel SageMaker çıkarım kapsayıcısına bağlı temel birimi bulun.

model_local_volume = $(grep -A1 -w "volumes:" $docker_manifest | tail -n 1 | tr -d ' ' | awk -F: '{print $1}' | cut -c 2-) # Returns something like: /tmp/tmpcr4bu_a7</p>

Çalışan SageMaker çıkarım kapsayıcısının yerel kopyasını oluşturun: Ardından, makine öğrenimi çıkarım modelimizi çalıştıran şu anda çalışan kapsayıcı görüntüsünü bulacağız ve kapsayıcının yerel bir kopyasını oluşturacağız. Bu, Amazon ECR'den çekilecek kapsayıcı görüntüsünün kendi kopyasına sahip olmamızı sağlayacaktır.

# Find container ID of running SageMaker Local container
mkdir sagemaker-container
container_id=$(docker ps --format "{{.ID}} {{.Image}}" | grep "tensorflow" | awk '{print $1}')
# Retrieve the files of the container locally
docker cp $my_container_id:/ sagemaker-container/

harekete geçmeden önce model_local_volumeAmazon S3'e ileteceğimiz, çalışan Docker görüntüsünün bir kopyasını şimdi sagemaker-container dizini, Amazon Elastic Container Registry'ye. değiştirdiğinizden emin olun region, aws_account_id, docker_image_id ve my-repository:tag veya takip et Amazon ECR kullanım kılavuzu. Ayrıca, nihai ECR Görüntüsü URL'sini not ettiğinizden emin olun (aws_account_id.dkr.ecr.region.amazonaws.com/my-repository:tag), EKS dağıtımımızda kullanacağımız.

aws ecr get-login-password --region region | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.region.amazonaws.com
docker build .
docker tag <docker-image-id> aws_account_id.dkr.ecr.region.amazonaws.com/my-repository:tag
docker push aws_account_id.dkr.ecr.region.amazonaws.com/my-repository:tag

Artık çıkarım uç noktasına karşılık gelen bir ECR görüntümüz olduğuna göre, yeni bir Amazon S3 klasörü oluşturun ve SageMaker Yerel yapılarını kopyalayın (model_local_volume) bu kovaya. Buna paralel olarak, Amazon EC2 bulut sunucularının klasör içindeki okuma nesnelerine erişmesini sağlayan bir Kimlik Erişim Yönetimi (IAM) oluşturun. değiştirdiğinizden emin olun Amazon S3 klasörünüz için küresel olarak benzersiz bir adla.

# Create S3 Bucket for model artifacts
aws s3api create-bucket --bucket <unique-bucket-name>
aws s3api put-public-access-block --bucket <unique-bucket-name> --public-access-block-configuration "BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=true"
# Step 2: Create IAM attachment to Node Group
cat > ec2_iam_policy.json << EOF
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::sagemaker-wavelength-demo-app/*", "arn:aws:s3:::sagemaker-wavelength-demo-app" ] } ]
} # Create IAM policy
policy_arn=$(aws iam create-policy --policy-name sagemaker-demo-app-s3 --policy-document file://ec2_iam_policy.json --query Policy.Arn)
aws iam attach-role-policy --role-name wavelength-eks-Cluster-wl-workers --policy-arn $policy_arn # Push model artifacts to S3
cd $model_local_volume
tar -cvf sagemaker_model.tar .
aws s3 cp sagemaker_model.tar s3://

Ardından, her EC2 bulut sunucusunun başlatma sırasında model yapıtının bir kopyasını çekmesini sağlamak için EKS çalışan düğümlerinizin kullanıcı verilerini düzenleyin. Kullanıcı veri komut dosyanızda, başlatma sırasında S3 API'sini kullanarak her düğümün model yapılarını aldığından emin olun. değiştirdiğinizden emin olun Amazon S3 klasörünüz için küresel olarak benzersiz bir adla. Düğümün kullanıcı verilerinin EKS önyükleme betiğini de içereceği göz önüne alındığında, tüm kullanıcı verileri buna benzer görünebilir.

#!/bin/bash
mkdir /tmp/model</p><p>cd /tmp/model
aws s3api get-object --bucket sagemaker-wavelength-demo-app --key sagemaker_model.tar  sagemaker_model.tar
tar -xvf sagemaker_model.tar
set -o xtrace
/etc/eks/bootstrap.sh <your-eks-cluster-id>

Artık mevcut docker bildirimini inceleyebilir ve kullanarak Kubernetes dostu bildirim dosyalarına çevirebilirsiniz. kompoze etmek, iyi bilinen bir dönüştürme aracı. Not: Bir sürüm uyumluluğu hatası alırsanız, version docker-compose.yml dosyasının 27. satırındaki öznitelik “2”.

curl -L https://github.com/kubernetes/kompose/releases/download/v1.26.0/kompose-linux-amd64 -o kompose
chmod +x kompose && sudo mv ./kompose /usr/local/bin/compose
cd "$(dirname "$docker_manifest")"
kompose convert 

Kompose'u çalıştırdıktan sonra dört yeni dosya göreceksiniz: Deployment nesne, Service nesne, PersistentVolumeClaim nesne ve NetworkPolicy nesne. Artık uç noktadaki Kubernetes'e akınınıza başlamak için ihtiyacınız olan her şeye sahipsiniz!

SageMaker model eserlerini konuşlandırın

AWS Cloud9 IDE'nize kubectl ve aws-iam-authenticator indirmiş olduğunuzdan emin olun. Değilse, kurulum kılavuzlarını takip edin:

Şimdi, aşağıdaki adımları tamamlayın:

Değiştirmek service/algo-1-ow3nv hizmet türünü değiştirmek için nesne ClusterIP için NodePort. Örneğimizde, bağlantı noktası olarak 30,007 bağlantı noktasını seçtik. NodePort:

# algo-1-ow3nv-service.yaml
apiVersion: v1
kind: Service
metadata: annotations: kompose.cmd: kompose convert kompose.version: 1.26.0 (40646f47) creationTimestamp: null labels: io.kompose.service: algo-1-ow3nv name: algo-1-ow3nv
spec: type: NodePort ports: - name: "8080" port: 8080 targetPort: 8080 nodePort: 30007 selector: io.kompose.service: algo-1-ow3nv
status: loadBalancer: {}

Ardından, düğümünüz için güvenlik grubunda NodePort'a izin vermelisiniz. Bunu yapmak için, güvenlik grubu kimliğini alın ve NodePort'u izin verilenler listesine alın:

node_group_sg=$(aws ec2 describe-security-groups --filters Name=group-name,Values='wavelength-eks-Cluster*' --query "SecurityGroups[0].GroupId" --output text)
aws ec2 authorize-security-group-ingress --group-id $node_group_sg --ip-permissions IpProtocol=tcp,FromPort=30007,ToPort=30007,IpRanges='[{CidrIp=0.0.0.0/0}]'

Ardından, algo-1-ow3nv-deployment.yaml monte etmek için tezahür ettirin /tmp/model hostPath kapsayıcı dizini. Yer değiştirmek daha önce oluşturduğunuz ECR görüntüsü ile:

# algo-1-ow3nv-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata: annotations: kompose.cmd: kompose convert kompose.version: 1.26.0 (40646f47) creationTimestamp: null labels: io.kompose.service: algo-1-ow3nv name: algo-1-ow3nv
spec: replicas: 1 selector: matchLabels: io.kompose.service: algo-1-ow3nv strategy: type: Recreate template: metadata: annotations: kompose.cmd: kompose convert kompose.version: 1.26.0 (40646f47) creationTimestamp: null labels: io.kompose.network/environment-sagemaker-local: "true" io.kompose.service: algo-1-ow3nv spec: containers: - args: - serve env: - name: SAGEMAKER_CONTAINER_LOG_LEVEL value: "20" - name: SAGEMAKER_PROGRAM value: inference.py - name: SAGEMAKER_REGION value: us-east-1 - name: SAGEMAKER_SUBMIT_DIRECTORY value: /opt/ml/model/code image: <your-ecr-image> name: sagemaker-test-model ports: - containerPort: 8080 resources: {} stdin: true tty: true volumeMounts: - mountPath: /opt/ml/model name: algo-1-ow3nv-claim0 restartPolicy: Always volumes: - name: algo-1-ow3nv-claim0 hostPath: path: /tmp/model
status: {}

Kompose'dan oluşturduğunuz bildirim dosyalarıyla, yapılandırmaları kümenize uygulamak için kubectl'i kullanın:

$ kubectl apply -f algo-1-ow3nv-deployment.yaml algo-1-ow3nv-service.yaml
deployment.apps/algo-1-ow3nv created
service/algo-1-ow3nv created

5G uç modeline bağlanın

Modelinize bağlanmak için aşağıdaki adımları tamamlayın:

Amazon EC2 konsolunda, EKS çalışan düğümünün operatör IP'sini alın veya taşıyıcı IP adresini doğrudan sorgulamak için AWS CLI'yi kullanın:

aws ec2 describe-instances --filters "Name=tag:aws:autoscaling:groupName,Values=eks-EKSNodeGroup*" --query 'Reservations[*].Instances[*].[Placement.AvailabilityZone,NetworkInterfaces[].Association.CarrierIp]' --output text
# Example Output: 155.146.1.12

Artık, taşıyıcı IP adresi ayıklandığında, modele doğrudan NodePort'u kullanarak bağlanabilirsiniz. adlı bir dosya oluşturun. invoke.py tonun pozitif mi yoksa negatif mi olduğunu belirlemek için bir duyarlılık analizcisine karşı çalıştırılacak metin tabanlı bir girdi sağlayarak BERT modelini doğrudan çağırmak için:

import json
endpoint_name="jumpstart-example-tensorflow-tc-bert-en-uncased-L-12-H-768-A-12-2"
request_body = "simply stupid , irrelevant and deeply , truly , bottomlessly cynical ".encode("utf-8")
import requests
r2=requests.post(url="http://155.146.1.12:30007/invocations", data=request_body, headers={"Content-Type":"application/x-text","Accept":"application/json;verbose"})
print(r2.text)

Çıktınız aşağıdakine benzemelidir:

{"probabilities": [0.998723, 0.0012769578], "labels": [0, 1], "predicted_label": 0}

Temizlemek

Oluşturulan tüm uygulama kaynaklarını yok etmek için AWS Wavelength çalışan düğümlerini, EKS kontrol düzlemini ve VPC içinde oluşturulan tüm kaynakları silin. Ek olarak, kapsayıcı görüntüsünü barındırmak için kullanılan ECR deposunu, SageMaker model yapıtlarını barındırmak için kullanılan S3 klasörlerini ve sagemaker-demo-app-s3 IAM politikası.

Sonuç

Bu gönderide, SageMaker modellerini Amazon EKS ve AWS Wavelength kullanarak ağ ucuna dağıtmaya yönelik yeni bir yaklaşımı gösterdik. AWS Wavelength ile ilgili Amazon EKS en iyi uygulamaları hakkında bilgi edinmek için bkz. AWS Wavelength üzerinde coğrafi olarak dağıtılmış Amazon EKS kümelerini dağıtın. Ek olarak, Hızlı Başlangıç ​​hakkında daha fazla bilgi edinmek için şu adresi ziyaret edin: Amazon SageMaker JumpStart Geliştirici Kılavuzu ya da Hızlı Başlangıç ​​Mevcut Model Tablosu.


Yazarlar Hakkında

 Robert Belson AWS Dünya Çapında Telekom İş Birimi'nde AWS Edge Bilişim konusunda uzmanlaşmış bir Geliştirici Avukatıdır. Otomasyon, hibrit ağ ve uç bulutu kullanarak iş zorluklarını çözmek için geliştirici topluluğu ve büyük kurumsal müşterilerle çalışmaya odaklanıyor.

Muhammed El-Mehdar AWS'de Dünya Çapında Telekom İş Birimi'nde Kıdemli Çözüm Mimarıdır. Ana odak noktası, müşterilerin Telco ve Kurumsal BT iş yüklerini AWS üzerinde oluşturmasına ve devreye almasına yardımcı olmaktır. AWS'ye katılmadan önce Mohammed, 13 yılı aşkın bir süredir Telco sektöründe çalışmaktadır ve LTE Paket Çekirdeği, 5G, IMS ve WebRTC alanlarında zengin bir deneyime sahiptir. Mohammed, Concordia Üniversitesi'nden Telekomünikasyon Mühendisliği alanında lisans derecesine sahiptir.

Evan Kravitz Amazon Web Services'de SageMaker JumpStart üzerinde çalışan bir yazılım mühendisidir. New York'ta yemek pişirmeyi ve koşuya çıkmayı seviyor.

Justin St.Arnauld BT endüstrisinde 15 yılı aşkın deneyime sahip Verizon'da Kamu Sektörü için Çözüm Mimarları Yardımcı Direktörüdür. Edge bilgi işlem ve 5G ağlarının gücünün tutkulu bir savunucusudur ve bu teknolojilerden yararlanan yenilikçi teknoloji çözümleri geliştirme konusunda uzmandır. Justin, Amazon Web Services'ın (AWS) müşterileri için son teknoloji çözümler sunma konusunda sunduğu yetenekler konusunda özellikle hevesli. Justin, boş zamanlarında en son teknoloji trendlerini takip etmekten ve bilgi ve içgörülerini sektördeki diğer kişilerle paylaşmaktan keyif alıyor.

spot_img

En Son İstihbarat

spot_img