Azure Batch Demostration

Onur BOLATOĞLU
5 min readMar 7, 2024

--

Azure Batch, Microsoft Azure’un bir parçasıdır. Büyük ölçekli paralel ve yüksek performanslı hesaplama işlerini yönetmek ve çalıştırmak için tasarlanmış bir hizmettir. Kullanıcıların, bilimsel analizler, veri işleme, render işlemleri gibi hesaplama yoğun görevleri, yüzlerce, binlerce hatta on binlerce sanal makine üzerinde kolayca çalıştırmalarına olanak tanır.

Bizim örneğimizde; storage hesabımız altında “input” blob’u içerisinde bulunan, büyük boyutlu görselleri, batch ile küçültüp, “output” blob’u altına taşıyacağız.

Bunun için adım adım ilerleyelim:

1- Öncelikle kaynaklarımızı kuracağımız bir resource group oluşturmalıyız.

az group create --name rg-onurBatch-001 --location eastus2

2- Batch servisimizin bağlanacağı bir storage hesabı oluşturuyoruz. input/ouput ve diğer çıktıları bu storage hesabına yazacağız.

az storage account create --resource-group rg-onurBatch-001 --name onurbatchstorage --location eastus2 --sku Standard_LRS

3- Batch hesabımızı oluşturabiliriz. Hesabı oluştururkeni batch servisinin kullanacağı storage hesabını da belirtmeliyiz.

az batch account create --name onurbatchaccount --storage-account onurbatchstorage --resource-group rg-onurBatch-001 --location eastus2

4- Batch hesabımıza cli arayıcılığıyla login olmalıyız.

az batch account login --name onurbatchaccount --resource-group rg-onurBatch-001 --shared-key-auth

5- Storage hesabımız üzerinde 3 adet blob oluşturmalıyız. “input-output-script”

input: orjinal dosyaların atıldığı blob.
output: dosyaların işlenip, batch tarafından upload edilen blob.
script: işlemi yapacak olan kodun bulunduğu blob.

input ve output blobları ilk etapta boş olmalılar. Öncelikle, Script blob’u içerisine kodumuzu upload edelim.

from azure.storage.blob import BlobServiceClient, BlobClient
from PIL import Image
import io

# Azure Storage kimlik bilgilerinizi buraya girin
connect_str = "DefaultEndpointsProtocol=https;AccountName=onurbatchstorage;AccountKey=v8mvAP7feZWnDHWm2aitupfivkZmzWXoxLb7Ag9MENPsgkm+HBbp9yllurDTq8tG+AStPCOjog==;EndpointSuffix=core.windows.net"
input_container_name = "input"
output_container_name = "output"

# Blob Service Client'ı initialize etme
blob_service_client = BlobServiceClient.from_connection_string(connect_str)

# Input container'daki tüm blob'ları listele
input_container_client = blob_service_client.get_container_client(input_container_name)
blobs_list = input_container_client.list_blobs()

for blob in blobs_list:
# Blob'dan resmi indirme
blob_client = blob_service_client.get_blob_client(container=input_container_name, blob=blob.name)
blob_data = blob_client.download_blob()
image_stream = io.BytesIO(blob_data.readall())

# Resmi Pillow ile açma ve boyutunu değiştirme
with Image.open(image_stream) as image:
# Örneğin, boyutu yüzde 50 olarak değiştir
new_size = (int(image.width / 2), int(image.height / 2))
resized_image = image.resize(new_size, Image.ANTIALIAS)

# İşlenmiş resmi bir byte stream olarak kaydetme
output_stream = io.BytesIO()
resized_image.save(output_stream, format=image.format)
output_stream.seek(0)

# İşlenmiş resmi output container'a yükleme
output_blob_client = blob_service_client.get_blob_client(container=output_container_name, blob=blob.name)
output_blob_client.upload_blob(output_stream, overwrite=True)

# İşlenmiş blob'ı input container'dan silme
blob_client.delete_blob()

Blob tarafında şu anlık yapılcaklar bu kadar.

6- Batch hesabımıza gelip, pool oluşturmalıyız: Burada işlemi yapacak sunucuları belirtmeliyiz ve startup ayarlamalarını yapmalıyız.

6a- Add butonuna basıyoruz.

6b- Gerekli genel bilgileri ve sunucu family seçmemiz gerekmektedir.

6c- Startup komutlarını giriyoruz: bizim örneğimizde kodumuzun çalışabilmesi için, python paketinin sisteme kurulmuş olması gerekiyor. Ayrıca diğer bağımlılık paketlerini de kurmamız gerekiyor.

/bin/sh -c 'sudo apt-get update && sudo apt-get install -y python3 python3-pip && pip install azure-storage-blob && pip install Pillow==9.5.0'

6d- Scriptimizi blob üzerinden, bu sunuculara çekmemiz yani indirmemiz gerekiyor. Böylelikle pool altında oluşan her sunucu da scriptimiz hazır halde gelecek.

6d- Resource files kısmına gelip, storage>blob>script seçimlerini yapmalıyız. Storage belirtiyoruz, blobumuzu seçiyor ve içerisindeki python dosyamızı seçiyoruz. Pick storage blob butonu bu işe yaramaktadır. Ardından bu dosyayı sunucularda hangi path içerisine atacağımızı belirtmeliyiz ve yetkilerini düzenlemeliyiz. Diğer ayarlar default kalabilir “save” diyip kapatıp, sunucuların ayaklanmalarını bekliyoruz.

NOT: kurulum yapacağımız için, elevation level kısımını “Pool autouser Admin” seçmeliyiz.

Görüldüğü üzere, sunucular ayaklandı. Şimdi diğer adıma geçebiliriz.

7- Batch hesabımız üzerinde bir job oluşturup, bu job’uda bir önceki adımda oluşturduğumuz pool’a assing ediyoruz. (Azure portal üzerinden de oluşturulabilir)

az batch job create --id myJob --pool-id pool-img

Göreceğiniz üzere job oluşturuldu.

8- Yeni oluşturduğumuz job’a gelip, bir task oluşturmalıyız.

8a- Add butonuna basıyoruz.

8b- Task bilgilerini ve asıl işi yapacak komutumuzu giriyoruz:

NOT: /opt/resize.py dizinini hatırlayacağınız üzere, yukarıdaki adımda tanımlamıştık. Şimdi bu dizine indirdiğimiz scripti bu şekilde çağırabilir ve çalıştırabiliriz.

python3 /opt/resize.py

8c- Submit butonuna basmadan, öncelikle az önce oluşturduğumuz storage hesabımıza gelip, işlenmesi gereken görüntüleri “input” blob ’una upload etmeliyiz ki uygulamamız düzgün bir şekilde çalışsın.

Görselleri upload ettik, şimdi “submit” butonuna basıp, taskı çalıştrabiliriz.

9- İşlem tamamlandı!!!! Ekran görüntülerinden de göreceğiniz üzere, imajlar işlendi ve görseller output blob’una upload edildi.

Böylelikle, büyük boyutlu görselleri basit bir şekilde küçültüp, saklayabiliriz.

Elbette bu sadece bir örnek ve batch ile yapabileceklerimizin bir sınırı yok. Bu örnekler çeşitlendirilebilir ve her alanda bize yardımcı olabilir.

— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —

--

--