Szybki start: tworzenie puli usługi Batch i uruchamianie zadania przy użyciu języka Python
W tym przewodniku Szybki start pokazano, jak rozpocząć pracę z usługą Azure Batch, uruchamiając aplikację korzystającą z bibliotek usługi Azure Batch dla języka Python. Aplikacja w języku Python:
- Przekazuje kilka plików danych wejściowych do kontenera obiektów blob usługi Azure Storage do użycia na potrzeby przetwarzania zadań usługi Batch.
- Tworzy pulę dwóch maszyn wirtualnych lub węzłów obliczeniowych z systemem operacyjnym Ubuntu 20.04 LTS.
- Tworzy zadanie i trzy zadania podrzędne do uruchomienia w tych węzłach. Każde zadanie przetwarza jeden z plików wejściowych przy użyciu wiersza polecenia powłoki Bash.
- Wyświetla pliki wyjściowe zwracane przez zadania.
Po ukończeniu tego przewodnika Szybki start zapoznasz się z kluczowymi pojęciami usługi Batch i możesz przystąpić do korzystania z usługi Batch z bardziej realistycznymi, większymi obciążeniami na dużą skalę.
Wymagania wstępne
Konto platformy Azure z aktywną subskrypcją. Jeśli go nie masz, utwórz bezpłatne konto.
Konto usługi Batch z połączonym kontem usługi Azure Storage. Konta można utworzyć przy użyciu dowolnej z następujących metod: Azure Cli Azure Portal Bicep | ARM template Terraform (Terraform szablonu arm dla interfejsu | wiersza polecenia platformy Azure w witrynie | Azure Portal). |
Język Python w wersji 3.8 lub nowszej , który obejmuje menedżera pakietów pip .
Uruchom aplikację
Aby ukończyć ten przewodnik Szybki start, pobierz lub sklonujesz aplikację w języku Python, podaj wartości konta, uruchom aplikację i zweryfikuj dane wyjściowe.
Pobieranie lub klonowanie aplikacji
Pobierz lub sklonuj aplikację Szybki start dla języka Python usługi Azure Batch z usługi GitHub. Użyj następującego polecenia, aby sklonować repozytorium aplikacji z klientem Git:
git clone https://github.com/Azure-Samples/batch-python-quickstart.git
Przejdź do folderu batch-python-quickstart/src i zainstaluj wymagane pakiety przy użyciu polecenia
pip
.pip install -r requirements.txt
Podaj informacje o koncie
Aplikacja w języku Python musi używać nazw kont usługi Batch i magazynu, wartości kluczy konta i punktu końcowego konta usługi Batch. Te informacje można uzyskać z witryny Azure Portal, interfejsów API platformy Azure lub narzędzi wiersza polecenia.
Aby uzyskać informacje o koncie z witryny Azure Portal:
- Na pasku usługi Azure Search wyszukaj i wybierz nazwę konta usługi Batch.
- Na stronie Konto usługi Batch wybierz pozycję Klucze w obszarze nawigacji po lewej stronie.
- Na stronie Klucze skopiuj następujące wartości:
- Konto usługi Batch
- Punkt końcowy konta
- Podstawowy klucz dostępu
- Nazwa konta magazynu
- Klucz1
W pobranej aplikacji języka Python zmodyfikuj następujące ciągi w pliku config.py , aby podać skopiowane wartości.
BATCH_ACCOUNT_NAME = '<batch account>'
BATCH_ACCOUNT_KEY = '<primary access key>'
BATCH_ACCOUNT_URL = '<account endpoint>'
STORAGE_ACCOUNT_NAME = '<storage account name>'
STORAGE_ACCOUNT_KEY = '<key1>'
Ważne
Udostępnianie kluczy kont w źródle aplikacji nie jest zalecane w przypadku użycia produkcyjnego. Należy ograniczyć dostęp do poświadczeń i odwołać się do nich w kodzie przy użyciu zmiennych lub pliku konfiguracji. Najlepiej przechowywać klucze kont usługi Batch i magazynu w usłudze Azure Key Vault.
Uruchamianie aplikacji i wyświetlanie danych wyjściowych
Uruchom aplikację, aby zobaczyć przepływ pracy usługi Batch w akcji.
python python_quickstart_client.py
Typowy czas wykonywania wynosi około trzech minut. Konfiguracja początkowego węzła puli zajmuje jak najwięcej czasu.
Aplikacja zwraca dane wyjściowe podobne do następującego przykładu:
Sample start: 11/26/2012 4:02:54 PM
Uploading file taskdata0.txt to container [input]...
Uploading file taskdata1.txt to container [input]...
Uploading file taskdata2.txt to container [input]...
Creating pool [PythonQuickstartPool]...
Creating job [PythonQuickstartJob]...
Adding 3 tasks to job [PythonQuickstartJob]...
Monitoring all tasks for 'Completed' state, timeout in 00:30:00...
Podczas uruchamiania węzłów obliczeniowych puli jest wstrzymana Monitoring all tasks for 'Completed' state, timeout in 00:30:00...
. W miarę tworzenia zadań usługa Batch kolejkuje je do uruchomienia w puli. Gdy tylko pierwszy węzeł obliczeniowy jest dostępny, pierwsze zadanie jest uruchamiane w węźle. Stan węzła, zadania i zadania można monitorować na stronie konta usługi Batch w witrynie Azure Portal.
Po zakończeniu każdego zadania zobaczysz dane wyjściowe podobne do następującego przykładu:
Printing task output...
Task: Task0
Node: tvm-2850684224_3-20171205t000401z
Standard output:
Batch processing began with mainframe computers and punch cards. Today it still plays a central role...
Przeglądanie kodu
Zapoznaj się z kodem, aby poznać kroki opisane w przewodniku Szybki start dla języka Python w usłudze Azure Batch.
Tworzenie klientów usługi i przekazywanie plików zasobów
Aplikacja tworzy obiekt BlobServiceClient w celu interakcji z kontem magazynu.
blob_service_client = BlobServiceClient( account_url=f"https://{config.STORAGE_ACCOUNT_NAME}.{config.STORAGE_ACCOUNT_DOMAIN}/", credential=config.STORAGE_ACCOUNT_KEY )
Aplikacja używa
blob_service_client
odwołania do tworzenia kontenera na koncie magazynu i przekazywania plików danych do kontenera. Pliki w magazynie są definiowane jako obiekty ResourceFile usługi Batch, które następnie mogą być pobierane przez tę usługę do węzłów obliczeniowych.input_file_paths = [os.path.join(sys.path[0], 'taskdata0.txt'), os.path.join(sys.path[0], 'taskdata1.txt'), os.path.join(sys.path[0], 'taskdata2.txt')] input_files = [ upload_file_to_container(blob_service_client, input_container_name, file_path) for file_path in input_file_paths]
Aplikacja tworzy obiekt BatchServiceClient w celu tworzenia pul, zadań i zadań podrzędnych na koncie usługi Batch oraz zarządzania nimi. Klient usługi Batch używa uwierzytelniania klucza współużytkowanego. Usługa Batch obsługuje również uwierzytelnianie firmy Microsoft Entra.
credentials = SharedKeyCredentials(config.BATCH_ACCOUNT_NAME, config.BATCH_ACCOUNT_KEY) batch_client = BatchServiceClient( credentials, batch_url=config.BATCH_ACCOUNT_URL)
Tworzenie puli węzłów obliczeniowych
Aby utworzyć pulę usługi Batch, aplikacja używa klasy PoolAddParameter do ustawiania liczby węzłów, rozmiaru maszyny wirtualnej i konfiguracji puli. Poniższy obiekt VirtualMachineConfiguration określa obraz ImageReference do obrazu z systemem Ubuntu Server 20.04 LTS w witrynie Azure Marketplace. Usługa Batch obsługuje szeroką gamę obrazów z witryny Marketplace systemów Linux i Windows Server, a także obsługuje niestandardowe obrazy maszyn wirtualnych.
Wartości POOL_NODE_COUNT
i POOL_VM_SIZE
są zdefiniowanymi stałymi. Aplikacja tworzy pulę dwóch węzłów o rozmiarze Standard_DS1_v2. Ten rozmiar zapewnia dobrą równowagę między wydajnością a kosztami dla tego przewodnika Szybki start.
Metoda pool.add przesyła pulę do usługi Batch.
new_pool = batchmodels.PoolAddParameter(
id=pool_id,
virtual_machine_configuration=batchmodels.VirtualMachineConfiguration(
image_reference=batchmodels.ImageReference(
publisher="canonical",
offer="0001-com-ubuntu-server-focal",
sku="20_04-lts",
version="latest"
),
node_agent_sku_id="batch.node.ubuntu 20.04"),
vm_size=config.POOL_VM_SIZE,
target_dedicated_nodes=config.POOL_NODE_COUNT
)
batch_service_client.pool.add(new_pool)
Utworzenie zadania usługi Batch
Zadanie usługi Batch to logiczna grupa zawierająca co najmniej jedno zadanie podrzędne. Zadanie zawiera ustawienia wspólne dla zadań, takich jak priorytet i pula do uruchamiania zadań podrzędnych.
Aplikacja używa klasy JobAddParameter do utworzenia zadania w puli. Metoda job.add dodaje zadanie do określonego konta usługi Batch. Początkowo zadanie nie zawiera zadań podrzędnych.
job = batchmodels.JobAddParameter(
id=job_id,
pool_info=batchmodels.PoolInformation(pool_id=pool_id))
batch_service_client.job.add(job)
Tworzenie zadań
Usługa Batch udostępnia kilka sposobów wdrażania aplikacji i skryptów w węzłach obliczeniowych. Ta aplikacja tworzy listę obiektów zadań przy użyciu klasy TaskAddParameter . Każde zadanie przetwarza plik wejściowy przy użyciu parametru command_line
w celu określenia aplikacji lub skryptu.
Poniższy skrypt przetwarza obiekty wejściowe resource_files
, uruchamiając polecenie powłoki cat
Bash w celu wyświetlenia plików tekstowych. Następnie aplikacja używa metody task.add_collection , aby dodać każde zadanie do zadania, co powoduje kolejkę zadań do uruchomienia w węzłach obliczeniowych.
tasks = []
for idx, input_file in enumerate(resource_input_files):
command = f"/bin/bash -c \"cat {input_file.file_path}\""
tasks.append(batchmodels.TaskAddParameter(
id=f'Task{idx}',
command_line=command,
resource_files=[input_file]
)
)
batch_service_client.task.add_collection(job_id, tasks)
Wyświetlanie danych wyjściowych zadania podrzędnego
Aplikacja monitoruje stan zadań podrzędnych, aby upewnić się, że zostaną one ukończone. Po pomyślnym uruchomieniu każdego zadania dane wyjściowe polecenia zadania są zapisywane w pliku stdout.txt . Następnie aplikacja wyświetla plik stdout.txt dla każdego ukończonego zadania.
tasks = batch_service_client.task.list(job_id)
for task in tasks:
node_id = batch_service_client.task.get(job_id, task.id).node_info.node_id
print(f"Task: {task.id}")
print(f"Node: {node_id}")
stream = batch_service_client.file.get_from_task(
job_id, task.id, config.STANDARD_OUT_FILE_NAME)
file_text = _read_stream_as_string(
stream,
text_encoding)
if text_encoding is None:
text_encoding = DEFAULT_ENCODING
sys.stdout = io.TextIOWrapper(sys.stdout.detach(), encoding = text_encoding)
sys.stderr = io.TextIOWrapper(sys.stderr.detach(), encoding = text_encoding)
print("Standard output:")
print(file_text)
Czyszczenie zasobów
Aplikacja automatycznie usuwa utworzony kontener magazynu, a także udostępnia opcję usunięcia puli i zadania usługi Batch. Pule i węzły są naliczane opłaty, gdy węzły są uruchomione, nawet jeśli nie są uruchomione zadania. Jeśli pula nie jest już potrzebna, usuń ją.
Gdy zasoby usługi Batch nie są już potrzebne, możesz usunąć grupę zasobów, która je zawiera. W witrynie Azure Portal wybierz pozycję Usuń grupę zasobów w górnej części strony grupy zasobów. Na ekranie Usuwanie grupy zasobów wprowadź nazwę grupy zasobów, a następnie wybierz pozycję Usuń.
Następne kroki
W tym przewodniku Szybki start uruchomiono aplikację, która używa interfejsu API języka Python usługi Batch do tworzenia puli, węzłów, zadań i zadań usługi Batch. Zadanie przesłało pliki zasobów do kontenera magazynu, uruchamiało zadania w węzłach i wyświetlało dane wyjściowe z węzłów.
Teraz, gdy rozumiesz kluczowe pojęcia usługi Batch, możesz przystąpić do korzystania z usługi Batch z bardziej realistycznymi, większymi obciążeniami na dużą skalę. Aby dowiedzieć się więcej na temat usługi Azure Batch i zapoznać się z równoległym obciążeniem za pomocą rzeczywistej aplikacji, przejdź do samouczka dotyczącego języka Python usługi Batch.