Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Za pomocą usługi Azure Batch można uruchamiać równoległe obciążenia obliczeniowe na maszynach wirtualnych z systemami Linux i Windows. W tym artykule opisano sposób tworzenia pul węzłów obliczeniowych systemu Linux w usłudze Batch przy użyciu bibliotek klienckich batch Python i Batch .NET .
Konfiguracja maszyny wirtualnej
Podczas tworzenia puli węzłów obliczeniowych w usłudze Batch dostępne są dwie opcje wyboru rozmiaru węzła i systemu operacyjnego: Konfiguracja usług Cloud Services i Konfiguracja maszyny wirtualnej. Konfiguracje maszyn wirtualnych składają się z maszyn wirtualnych platformy Azure, które mogą być tworzone na podstawie obrazów systemu Linux lub Windows. Podczas tworzenia puli przy użyciu konfiguracji maszyny wirtualnej należy określić rozmiar dostępnego węzła obliczeniowego, referencję do obrazu maszyny wirtualnej, który ma być zainstalowany na węzłach oraz SKU agenta węzła Batch (program uruchamiany na każdym węźle, umożliwiający interfejs między węzłem a usługą Batch).
Referencja do obrazu maszyny wirtualnej
Usługa Batch używa zestawów skalowalnych maszyn wirtualnych aby dostarczać węzły obliczeniowe w konfiguracji maszyny wirtualnej. Możesz określić obraz z witryny Azure Marketplace lub użyć Galerii Obliczeniowej Azure do przygotowania niestandardowego obrazu.
Podczas tworzenia odwołania do obrazu maszyny wirtualnej należy określić następujące właściwości:
| Właściwość referencyjna obrazu | Przykład |
|---|---|
| Wydawca | kanoniczny |
| Oferta | 0001-com-ubuntu-server-focal |
| SKU | 20_04-lts |
| Wersja | najnowszy |
Napiwek
Aby dowiedzieć się więcej o tych właściwościach i sposobach określania obrazów z witryny Marketplace, zobacz Znajdowanie obrazów maszyn wirtualnych z systemem Linux w witrynie Azure Marketplace przy użyciu interfejsu wiersza polecenia platformy Azure. Pamiętaj, że niektóre obrazy witryny Marketplace nie są obecnie zgodne z usługą Batch.
Lista obrazów maszyn wirtualnych
Nie wszystkie obrazy w witrynie Marketplace są zgodne z aktualnie dostępnymi agentami węzłów Batch. Aby wyświetlić listę wszystkich obsługiwanych obrazów maszyn wirtualnych w witrynie Marketplace dla usługi Batch oraz odpowiadających im SKU agenta węzła, użyj list_supported_images (Python), ListSupportedImages (Batch .NET) lub odpowiedniego interfejsu API w innym zestawie SDK danego języka.
SKU agenta węzła
Agent węzła Batch to program uruchamiany na każdym węźle w puli i udostępnia interfejs komend i sterowania między węzłem a usługą Batch. Istnieją różne implementacje agenta węzła, znane jako SKU, przeznaczone dla różnych systemów operacyjnych. Zasadniczo podczas tworzenia konfiguracji maszyny wirtualnej należy najpierw określić odwołanie do obrazu maszyny wirtualnej, a następnie określić agenta węzła do zainstalowania na obrazie. Zazwyczaj każda jednostka SKU agenta węzła jest zgodna z wieloma obrazami maszyn wirtualnych. Aby wyświetlić obsługiwane SKU agenta węzła i zgodność obrazów maszyny wirtualnej, możesz użyć polecenia interfejsu wiersza poleceń CLI Azure Batch:
az batch pool supported-images list
Aby uzyskać więcej informacji, zapoznaj się z tematem Konto — Wyświetlanie listy obsługiwanych obrazów — interfejs API REST (usługa Azure Batch) | Microsoft Docs.
Tworzenie puli systemu Linux: Usługa Batch Python
Poniższy fragment kodu przedstawia przykład użycia biblioteki klienta usługi Microsoft Azure Batch dla języka Python do utworzenia puli węzłów obliczeniowych systemu Ubuntu Server. Aby uzyskać więcej informacji na temat modułu usługi Batch w języku Python, zapoznaj się z dokumentacją referencyjną.
Ten fragment kodu tworzy jawnie element ImageReference i określa każdą z jego właściwości (wydawca, oferta, jednostka SKU, wersja). Jednak w kodzie produkcyjnym zalecamy użycie metody list_supported_images do wybrania spośród dostępnych kombinacji SKU agenta obrazu i węzła w czasie wykonywania.
# Import the required modules from the
# Azure Batch Client Library for Python
import azure.batch.batch_service_client as batch
import azure.batch.batch_auth as batchauth
import azure.batch.models as batchmodels
# Specify Batch account credentials
account = "<batch-account-name>"
key = "<batch-account-key>"
batch_url = "<batch-account-url>"
# Pool settings
pool_id = "LinuxNodesSamplePoolPython"
vm_size = "STANDARD_D2_V3"
node_count = 1
# Initialize the Batch client
creds = batchauth.SharedKeyCredentials(account, key)
config = batch.BatchServiceClientConfiguration(creds, batch_url)
client = batch.BatchServiceClient(creds, batch_url)
# Create the unbound pool
new_pool = batchmodels.PoolAddParameter(id=pool_id, vm_size=vm_size)
new_pool.target_dedicated = node_count
# Configure the start task for the pool
start_task = batchmodels.StartTask()
start_task.run_elevated = True
start_task.command_line = "printenv AZ_BATCH_NODE_STARTUP_DIR"
new_pool.start_task = start_task
# Create an ImageReference which specifies the Marketplace
# virtual machine image to install on the nodes
ir = batchmodels.ImageReference(
publisher="canonical",
offer="0001-com-ubuntu-server-focal",
sku="20_04-lts",
version="latest")
# Create the VirtualMachineConfiguration, specifying
# the VM image reference and the Batch node agent
# to install on the node
vmc = batchmodels.VirtualMachineConfiguration(
image_reference=ir,
node_agent_sku_id="batch.node.ubuntu 20.04")
# Assign the virtual machine configuration to the pool
new_pool.virtual_machine_configuration = vmc
# Create pool in the Batch service
client.pool.add(new_pool)
Jak wspomniano wcześniej, zalecamy użycie metody list_supported_images do dynamicznego wybierania spośród aktualnie obsługiwanych kombinacji agenta węzła i obrazu z Marketplace (zamiast jawnego tworzenia ImageReference). Poniższy fragment kodu języka Python pokazuje, jak używać tej metody.
# Get the list of supported images from the Batch service
images = client.account.list_supported_images()
# Obtain the desired image reference
image = None
for img in images:
if (img.image_reference.publisher.lower() == "canonical" and
img.image_reference.offer.lower() == "0001-com-ubuntu-server-focal" and
img.image_reference.sku.lower() == "20_04-lts"):
image = img
break
if image is None:
raise RuntimeError('invalid image reference for desired configuration')
# Create the VirtualMachineConfiguration, specifying the VM image
# reference and the Batch node agent to be installed on the node
vmc = batchmodels.VirtualMachineConfiguration(
image_reference=image.image_reference,
node_agent_sku_id=image.node_agent_sku_id)
Tworzenie puli systemu Linux: Batch .NET
Poniższy fragment kodu przedstawia przykład użycia biblioteki klienta platformy .NET usługi Batch do utworzenia puli węzłów obliczeniowych systemu Ubuntu Server. Aby uzyskać więcej informacji na temat Batch .NET, zapoznaj się z dokumentacją referencyjną.
Poniższy fragment kodu używa metody PoolOperations.ListSupportedImages do wybrania z listy obecnie obsługiwanych kombinacji obrazów Marketplace i jednostek SKU agenta. Ta technika jest zalecana, ponieważ lista obsługiwanych kombinacji może ulec zmianie od czasu do czasu. Najczęściej dodawane są obsługiwane kombinacje.
// Pool settings
const string poolId = "LinuxNodesSamplePoolDotNet";
const string vmSize = "STANDARD_D2_V3";
const int nodeCount = 1;
// Obtain a collection of all available node agent SKUs.
// This allows us to select from a list of supported
// VM image/node agent combinations.
List<ImageInformation> images =
batchClient.PoolOperations.ListSupportedImages().ToList();
// Find the appropriate image information
ImageInformation image = null;
foreach (var img in images)
{
if (img.ImageReference.Publisher == "canonical" &&
img.ImageReference.Offer == "0001-com-ubuntu-server-focal" &&
img.ImageReference.Sku == "20_04-lts")
{
image = img;
break;
}
}
// Create the VirtualMachineConfiguration for use when actually
// creating the pool
VirtualMachineConfiguration virtualMachineConfiguration =
new VirtualMachineConfiguration(image.ImageReference, image.NodeAgentSkuId);
// Create the unbound pool object using the VirtualMachineConfiguration
// created above
CloudPool pool = batchClient.PoolOperations.CreatePool(
poolId: poolId,
virtualMachineSize: vmSize,
virtualMachineConfiguration: virtualMachineConfiguration,
targetDedicatedComputeNodes: nodeCount);
// Commit the pool to the Batch service
await pool.CommitAsync();
Mimo że poprzedni fragment kodu używa metody PoolOperations.istSupportedImages do dynamicznego wyświetlania listy i wybierania z obsługiwanych kombinacji jednostek SKU agenta obrazu i węzła (zalecane), można również jawnie skonfigurować metodę ImageReference :
ImageReference imageReference = new ImageReference(
publisher: "canonical",
offer: "0001-com-ubuntu-server-focal",
sku: "20_04-lts",
version: "latest");
Nawiązywanie połączenia z węzłami systemu Linux przy użyciu protokołu SSH
Podczas programowania lub rozwiązywania problemów może być konieczne zalogowanie się do węzłów w puli. W przeciwieństwie do węzłów obliczeniowych systemu Windows nie można używać protokołu RDP (Remote Desktop Protocol) do nawiązywania połączenia z węzłami systemu Linux. Zamiast tego usługa Batch umożliwia dostęp SSH w każdym węźle na potrzeby połączenia zdalnego.
Poniższy fragment kodu w języku Python tworzy użytkownika na każdym węźle w puli, co jest wymagane do połączenia zdalnego. Następnie wyświetla informacje o połączeniu secure shell (SSH) dla każdego węzła.
import datetime
import getpass
import azure.batch.batch_service_client as batch
import azure.batch.batch_auth as batchauth
import azure.batch.models as batchmodels
# Specify your own account credentials
batch_account_name = ''
batch_account_key = ''
batch_account_url = ''
# Specify the ID of an existing pool containing Linux nodes
# currently in the 'idle' state
pool_id = ''
# Specify the username and prompt for a password
username = 'linuxuser'
password = getpass.getpass()
# Create a BatchClient
credentials = batchauth.SharedKeyCredentials(
batch_account_name,
batch_account_key
)
batch_client = batch.BatchServiceClient(
credentials,
base_url=batch_account_url
)
# Create the user that will be added to each node in the pool
user = batchmodels.ComputeNodeUser(username)
user.password = password
user.is_admin = True
user.expiry_time = \
(datetime.datetime.today() + datetime.timedelta(days=30)).isoformat()
# Get the list of nodes in the pool
nodes = batch_client.compute_node.list(pool_id)
# Add the user to each node in the pool and print
# the connection information for the node
for node in nodes:
# Add the user to the node
batch_client.compute_node.add_user(pool_id, node.id, user)
# Obtain SSH login information for the node
login = batch_client.compute_node.get_remote_login_settings(pool_id,
node.id)
# Print the connection info for the node
print("{0} | {1} | {2} | {3}".format(node.id,
node.state,
login.remote_login_ip_address,
login.remote_login_port))
Ten kod będzie miał dane wyjściowe podobne do poniższego przykładu. W takim przypadku pula zawiera cztery węzły systemu Linux.
Password:
tvm-1219235766_1-20160414t192511z | ComputeNodeState.idle | 13.91.7.57 | 50000
tvm-1219235766_2-20160414t192511z | ComputeNodeState.idle | 13.91.7.57 | 50003
tvm-1219235766_3-20160414t192511z | ComputeNodeState.idle | 13.91.7.57 | 50002
tvm-1219235766_4-20160414t192511z | ComputeNodeState.idle | 13.91.7.57 | 50001
Zamiast hasła można określić klucz publiczny SSH podczas tworzenia użytkownika w węźle.
W zestawie SDK dla języka Python użyj parametru ssh_public_key dla elementu ComputeNodeUser.
Na platformie .NET użyj właściwości ComputeNodeUser.SshPublicKey .
Cennik
Usługa Azure Batch jest oparta na usługach Azure Cloud Services i technologii Azure Virtual Machines. Sama usługa Batch jest oferowana bez ponoszenia kosztów, co oznacza, że opłaty są naliczane tylko za zasoby obliczeniowe (i związane z nimi koszty) używane przez rozwiązania usługi Batch. Po wybraniu opcji Konfiguracja maszyny wirtualnej, opłaty są naliczane na podstawie struktury cenowej Maszyn Wirtualnych.
W przypadku wdrażania aplikacji w węzłach usługi Batch przy użyciu pakietów aplikacji są również naliczane opłaty za zasoby usługi Azure Storage używane przez pakiety aplikacji.
Następne kroki
- Zapoznaj się z przykładami kodu języka Python w repozytorium GitHub azure-batch-samples, aby zobaczyć, jak wykonywać typowe operacje usługi Batch, takie jak pula, zadanie i tworzenie zadań. Plik README dołączony do przykładów języka Python zawiera szczegółowe informacje o sposobie instalowania wymaganych pakietów.
- Dowiedz się więcej o korzystaniu z maszyn wirtualnych typu spot platformy Azure z usługą Batch.