Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Azure'da büyük ölçekli paralel ve yüksek performanslı bilgi işlem (HPC) toplu işlerini verimli bir şekilde çalıştırmak için Azure Batch'i kullanın. Bu öğreticide Batch kullanarak paralel iş yükü çalıştırmaya yönelik bir Python örneği gösterilir. Genel bir Batch uygulaması iş akışı hakkında bilgi alacak ve Batch ve Depolama kaynakları ile programlı olarak etkileşimde bulunmayı öğreneceksiniz.
- Batch ve Depolama hesaplarıyla kimlik doğrulaması.
- Giriş dosyalarını Depolama'ya yükleyin.
- Bir uygulamayı çalıştırmak için işlem düğümleri havuzu oluşturun.
- Giriş dosyalarını işlemek için bir iş ve görevler oluşturun.
- Görev yürütmeyi izleyin.
- Çıkış dosyalarını alın.
Bu öğreticide, ffmpeg açık kaynak aracını kullanarak MP4 medya dosyalarını paralel olarak MP3 biçimine dönüştürebilirsiniz.
Azure hesabınız yoksa, başlamadan önce ücretsiz hesap oluşturun.
Önkoşullar
Bir Azure Batch hesabı ve bağlı bir Azure Depolama hesabı. Bu hesapları oluşturmak için Bkz. Azure portalı veya Azure CLI için Batch hızlı başlangıç kılavuzları.
Azure'da oturum açma
Azure portalınaoturum açın.
Hesap kimlik bilgilerini alma
Bu örnekte, Batch ve depolama hesaplarınız için kimlik bilgileri sağlamanız gerekir. Gerekli kimlik bilgilerini almanın kolay yolu Azure portalındadır. (Bu kimlik bilgilerini ayrıca Azure API'lerini veya komut satırı araçlarını kullanarak da alabilirsiniz.)
Tüm hizmetler>Batch hesapları'nı ve ardından Batch hesabınızın adını seçin.
Batch kimlik bilgilerini görmek için Anahtarlar'ı seçin. Batch hesabı, URL ve Birincil erişim anahtarı değerlerini metin düzenleyiciye kopyalayın.
Depolama hesabı adını ve anahtarlarını görmek için Depolama hesabı'nı seçin. Depolama hesabı adı ve Key1 değerlerini bir metin düzenleyiciye kopyalayın.
Örnek uygulamayı indirme ve çalıştırma
Örnek uygulamayı indirme
GitHub’dan örnek uygulamayı indirin veya kopyalayın. Örnek uygulama deposunu bir Git istemcisi ile kopyalamak için aşağıdaki komutu kullanın:
git clone https://github.com/Azure-Samples/batch-python-ffmpeg-tutorial.git
batch_python_tutorial_ffmpeg.py dosyasını içeren dizine gidin.
Python ortamınızda gerekli paketleri yüklemek için pip kullanın.
pip install -r requirements.txt
Config.py dosyasını açmak için bir kod düzenleyicisi kullanın. Batch ve depolama hesabı kimlik bilgisi dizelerini hesaplarınıza özgü değerlerle güncelleştirin. Örneğin:
_BATCH_ACCOUNT_NAME = 'yourbatchaccount'
_BATCH_ACCOUNT_KEY = 'xxxxxxxxxxxxxxxxE+yXrRvJAqT9BlXwwo1CwF+SwAYOxxxxxxxxxxxxxxxx43pXi/gdiATkvbpLRl3x14pcEQ=='
_BATCH_ACCOUNT_URL = 'https://yourbatchaccount.yourbatchregion.batch.azure.com'
_STORAGE_ACCOUNT_NAME = 'mystorageaccount'
_STORAGE_ACCOUNT_KEY = 'xxxxxxxxxxxxxxxxy4/xxxxxxxxxxxxxxxxfwpbIC5aAWA8wDu+AFXZB827Mt9lybZB1nUcQbQiUrkPtilK5BQ=='
Uygulamayı çalıştırma
Betiği çalıştırmak için:
python batch_python_tutorial_ffmpeg.py
Örnek uygulamayı çalıştırdığınızda, konsol çıktısı aşağıdakine benzer. Çalıştırma sırasında, havuzun işlem düğümleri başlatılırken Monitoring all tasks for 'Completed' state, timeout in 00:30:00... konumunda bir duraklama yaşarsınız.
Sample start: 11/28/2018 3:20:21 PM
Container [input] created.
Container [output] created.
Uploading file LowPriVMs-1.mp4 to container [input]...
Uploading file LowPriVMs-2.mp4 to container [input]...
Uploading file LowPriVMs-3.mp4 to container [input]...
Uploading file LowPriVMs-4.mp4 to container [input]...
Uploading file LowPriVMs-5.mp4 to container [input]...
Creating pool [LinuxFFmpegPool]...
Creating job [LinuxFFmpegJob]...
Adding 5 tasks to job [LinuxFFmpegJob]...
Monitoring all tasks for 'Completed' state, timeout in 00:30:00...
Success! All tasks completed successfully within the specified timeout period.
Deleting container [input]....
Sample end: 11/28/2018 3:29:36 PM
Elapsed time: 00:09:14.3418742
Havuz, işlem düğümleri, iş ve görevleri izlemek için Azure portalında Batch hesabınıza gidin. Örneğin, havuzunuzdaki işlem düğümlerinin ısı haritasını görmek için Havuzlar>LinuxFmpegPool'u seçin.
Görevler çalıştırılırken ısı haritası aşağıdakine benzer:
Uygulamayı varsayılan yapılandırmasında çalıştırdığınızda tipik yürütme süresi yaklaşık 5 dakikadır . En uzun süreyi havuz oluşturma işlemi alır.
Çıkış dosyalarını alma
ffmpeg görevleri tarafından oluşturulan çıkış MP3 dosyalarını indirmek için Azure portalını kullanabilirsiniz.
- Tüm hizmetler>Depolama hesapları seçeneğine ve sonra da depolama hesabınızın adına tıklayın.
- Bloblar>çıkış seçeneğine tıklayın.
- Çıkış MP3 dosyalarından birine sağ tıklayın ve ardından İndir’e tıklayın. Dosyayı açmak veya kaydetmek için tarayıcınızdaki yönergeleri izleyin.
Bu örnekte gösterilmese de dosyaları programlamayla işlem düğümlerinden veya depolama kapsayıcısından indirebilirsiniz.
Kodu gözden geçirin
Aşağıdaki bölümlerde örnek uygulama, Batch hizmetinde iş yükünü işlemeyi gerçekleştiren adımlara ayrılmıştır. Örnekteki her kod satırı tartışılmadığından, bu makalenin geri kalanını okurken Python koduna bakın.
Blob ve Batch istemcilerinde kimlik doğrulaması
Uygulama, bir depolama hesabıyla etkileşim kurmak için azure-storage-blob paketini kullanarak bir BlockBlobService nesnesi oluşturur.
blob_client = azureblob.BlockBlobService(
account_name=_STORAGE_ACCOUNT_NAME,
account_key=_STORAGE_ACCOUNT_KEY)
Uygulama, Batch hizmetinde havuzları, işleri ve görevleri oluşturmak ve yönetmek için bir BatchServiceClient nesnesi oluşturur. Örnekteki Batch istemcisi paylaşılan anahtar kimlik doğrulamasını kullanır. Batch ayrıca tek tek kullanıcıların veya katılımsız bir uygulamanın kimliğini doğrulamak için Microsoft Entra Kimliği aracılığıyla kimlik doğrulamasını da destekler.
credentials = batchauth.SharedKeyCredentials(_BATCH_ACCOUNT_NAME,
_BATCH_ACCOUNT_KEY)
batch_client = batch.BatchServiceClient(
credentials,
base_url=_BATCH_ACCOUNT_URL)
Giriş dosyalarını yükle
Uygulama, giriş MP4 dosyaları için bir depolama kapsayıcısı ve görev çıkışı için bir kapsayıcı oluşturmak üzere blob_client referansını kullanır. Ardından yerel upload_file_to_container dizinindeki MP4 dosyalarını kapsayıcıya yüklemek için işlevini çağırır. Depolama alanındaki dosyalar, Batch hizmetinin daha sonra işlem düğümlerine indirebileceği Batch ResourceFile nesneleri olarak tanımlanır.
blob_client.create_container(input_container_name, fail_on_exist=False)
blob_client.create_container(output_container_name, fail_on_exist=False)
input_file_paths = []
for folder, subs, files in os.walk(os.path.join(sys.path[0], './InputFiles/')):
for filename in files:
if filename.endswith(".mp4"):
input_file_paths.append(os.path.abspath(
os.path.join(folder, filename)))
# Upload the input files. This is the collection of files that are to be processed by the tasks.
input_files = [
upload_file_to_container(blob_client, input_container_name, file_path)
for file_path in input_file_paths]
İşlem düğümleri havuzu oluşturun
Ardından örnek, create_pool çağrısıyla Batch hesabında bir işlem düğümü havuzu oluşturur. Bu tanımlı işlev düğüm sayısını, VM boyutunu ve havuz yapılandırmasını ayarlamak için Batch PoolAddParameter sınıfını kullanır. Burada VirtualMachineConfiguration nesnesi, Azure Market'te yayımlanan bir Ubuntu Server 20.04 LTS görüntüsüne ImageReference belirtir. Batch, Azure Market’te çok çeşitli VM görüntülerinin yanı sıra özel VM görüntülerini destekler.
Düğüm sayısı ve VM boyutu, tanımlı sabitler kullanılarak ayarlanır. Batch ayrılmış düğümleri ve Spot düğümleri destekler ve havuzlarınızda ya da her ikisini birden kullanabilirsiniz. Özel düğümler, havuzunuz için ayrılmıştır. Spot düğümler, Azure'daki fazla VM kapasitesinden daha düşük bir fiyata sunulur. Azure yeterli kapasiteye sahip değilse spot düğümler kullanılamaz duruma gelir. Örnek kod, varsayılan olarak yalnızca beş Spot düğümü içeren bir Standard_A1_v2 boyutunda havuz oluşturur.
Fiziksel düğüm özelliklerine ek olarak, bu havuz yapılandırması bir StartTask nesnesi içerir. StartTask, bir düğüm havuza katıldığında ve her seferinde düğüm yeniden başlatıldığında, her düğümde yürütülür. Bu örnekte StartTask, düğümlere ffmpeg paketini ve bağımlılıklarını yüklemek için Bash kabuk komutlarını çalıştırır.
pool.add yöntemi, havuzu Batch hizmetine gönderir.
new_pool = batch.models.PoolAddParameter(
id=pool_id,
virtual_machine_configuration=batchmodels.VirtualMachineConfiguration(
image_reference=batchmodels.ImageReference(
publisher="Canonical",
offer="UbuntuServer",
sku="20.04-LTS",
version="latest"
),
node_agent_sku_id="batch.node.ubuntu 20.04"),
vm_size=_POOL_VM_SIZE,
target_dedicated_nodes=_DEDICATED_POOL_NODE_COUNT,
target_low_priority_nodes=_LOW_PRIORITY_POOL_NODE_COUNT,
start_task=batchmodels.StartTask(
command_line="/bin/bash -c \"apt-get update && apt-get install -y ffmpeg\"",
wait_for_success=True,
user_identity=batchmodels.UserIdentity(
auto_user=batchmodels.AutoUserSpecification(
scope=batchmodels.AutoUserScope.pool,
elevation_level=batchmodels.ElevationLevel.admin)),
)
)
batch_service_client.pool.add(new_pool)
İş oluşturma
Bir Batch işi, görevlerin çalıştırılacağı bir havuz ve çalışma için öncelik ile zamanlama gibi isteğe bağlı ayarları belirtir. Örnek, create_job çağrısıyla bir iş oluşturur. Bu tanımlı işlev, havuzunuzda bir iş oluşturmak için JobAddParameter sınıfını kullanır.
job.add yöntemi havuzu Batch hizmetine gönderir. Başlangıçta işin hiçbir görevi yoktur.
job = batch.models.JobAddParameter(
id=job_id,
pool_info=batch.models.PoolInformation(pool_id=pool_id))
batch_service_client.job.add(job)
Görev oluşturma
Uygulama, add_tasks adlı bir çağrı ile işte görevler oluşturur. Bu tanımlı işlev TaskAddParameter sınıfını kullanarak görev nesnelerinin listesini oluşturur. Her görev, bir resource_files parametresi kullanarak bir giriş command_line nesnesini işlemek için ffmpeg'i çalıştırır. ffmpeg, daha önce havuz oluşturulduğunda her bir düğüme yüklenmiştir. Burada komut satırı, her bir giriş MP4 (video) dosyasını bir MP3 (ses) dosyasına dönüştürmek için ffmpeg çalıştırır.
Örnek, komut satırını çalıştırdıktan sonra MP3 dosyası için bir OutputFile nesnesi oluşturur. Her görevin çıkış dosyaları (bu örnekte bir tane), görevin output_files özelliği kullanılarak bağlı depolama hesabındaki bir kapsayıcıya yüklenir.
Ardından uygulama, görevleri task.add_collection yöntemiyle işe ekler ve bu da bunları işlem düğümlerinde çalışacak şekilde kuyruğa alır.
tasks = list()
for idx, input_file in enumerate(input_files):
input_file_path = input_file.file_path
output_file_path = "".join((input_file_path).split('.')[:-1]) + '.mp3'
command = "/bin/bash -c \"ffmpeg -i {} {} \"".format(
input_file_path, output_file_path)
tasks.append(batch.models.TaskAddParameter(
id='Task{}'.format(idx),
command_line=command,
resource_files=[input_file],
output_files=[batchmodels.OutputFile(
file_pattern=output_file_path,
destination=batchmodels.OutputFileDestination(
container=batchmodels.OutputFileBlobContainerDestination(
container_url=output_container_sas_url)),
upload_options=batchmodels.OutputFileUploadOptions(
upload_condition=batchmodels.OutputFileUploadCondition.task_success))]
)
)
batch_service_client.task.add_collection(job_id, tasks)
Görevleri izleme
Görevler bir işe eklendiğinde Batch, bunları ilişkili havuzdaki işlem düğümlerinde yürütülmek üzere otomatik olarak kuyruğa alır ve zamanlar. Batch, belirttiğiniz ayarlara göre tüm görev kuyruğa alma, zamanlama, yeniden deneme ve diğer görev yönetimi görevlerini işler.
Görev yürütmeyi izlemeye yönelik birçok yaklaşım vardır.
wait_for_tasks_to_complete Bu örnekteki işlev taskState nesnesini kullanarak belirli bir durumdaki görevleri (bu durumda tamamlanan durumu) bir zaman sınırı içinde izler.
while datetime.datetime.now() < timeout_expiration:
print('.', end='')
sys.stdout.flush()
tasks = batch_service_client.task.list(job_id)
incomplete_tasks = [task for task in tasks if
task.state != batchmodels.TaskState.completed]
if not incomplete_tasks:
print()
return True
else:
time.sleep(1)
...
Kaynakları temizleme
Görevleri çalıştırdıktan sonra, uygulama kendi oluşturduğu giriş depolama kapsayıcısını otomatik olarak siler ve Batch havuzu ve işini silme seçeneğini sunar. BatchClient'ın JobOperations ve PoolOperations sınıflarının her ikisi de silme yöntemlerini kullanır ve silmeyi onaylarsanız bu yöntemler çağrılır. İşler ve görevler için ücret alınmasa da, işlem düğümleri için sizden ücret alınır. Bu nedenle, havuzları yalnızca gerektiğinde ayırmanız önerilir. Havuzu sildiğinizde düğümler üzerindeki tüm görev çıkışları silinir. Ancak, giriş ve çıkış dosyaları depolama hesabında kalır.
Kaynak grubunu, Batch hesabını ve depolama hesabını artık gerekli değilse silin. Azure portalında bunu yapmak için Batch hesabının kaynak grubunu seçin ve Kaynak grubunu sil'i seçin.
Sonraki adımlar
Bu öğreticide şunların nasıl yapılacağını öğrendiniz:
- Batch ve Depolama hesaplarıyla kimlik doğrulaması.
- Giriş dosyalarını Depolama'ya yükleyin.
- Bir uygulamayı çalıştırmak için işlem düğümleri havuzu oluşturun.
- Giriş dosyalarını işlemek için bir iş ve görevler oluşturun.
- Görev yürütmeyi izleyin.
- Çıkış dosyalarını alın.
Batch iş yüklerini zamanlamak ve işlemek için Python API'sini kullanma hakkında daha fazla örnek için GitHub'da Batch Python örneklerine bakın.