Rechenressourcen für benutzerdefiniertes Training konfigurieren

Wenn Sie ein benutzerdefiniertes Training durchführen, wird der Trainingscode auf einer oder mehreren VM-Instanzen ausgeführt. Sie können konfigurieren, welche VM-Typen für das Training verwendet werden sollen: Wenn Sie VMs mit mehr Rechenressourcen verwenden, kann das Training beschleunigt werden und Sie können mit größeren Datasets arbeiten. Dies kann jedoch auch höhere Trainingskosten verursachen.

In einigen Fällen können Sie GPUs auch verwenden, um das Training zu beschleunigen. Für GPUs fallen zusätzliche Kosten an.

Sie können auch den Typ und die Größe der Bootlaufwerke Ihrer Trainings-VMs anpassen.

In diesem Dokument werden die verschiedenen Rechenressourcen beschrieben, die Sie für das benutzerdefinierte Training verwenden können, und wie diese konfiguriert werden.

Hier geben Sie Rechenressourcen an

Geben Sie die Konfigurationsdetails in einem WorkerPoolSpec an. Je nachdem, wie Sie das benutzerdefinierte Training durchführen, platzieren Sie diese WorkerPoolSpec in einem der folgenden API-Felder:

Wenn Sie ein verteiltes Training machen, können Sie für jeden Worker-Pool unterschiedliche Einstellungen verwenden.

Maschinentypen

In WorkerPoolSpec müssen Sie einen der folgenden Maschinentypen im Feld machineSpec.machineType angeben. Jedes Replikat im Worker-Pool wird auf einer separaten VM mit dem angegebenen Maschinentyp ausgeführt.

  • a2-highgpu-1g*
  • a2-highgpu-2g*
  • a2-highgpu-4g*
  • a2-highgpu-8g*
  • a2-megagpu-16g*
  • e2-standard-4
  • e2-standard-8
  • e2-standard-16
  • e2-standard-32
  • e2-highmem-2
  • e2-highmem-4
  • e2-highmem-8
  • e2-highmem-16
  • e2-highcpu-16
  • e2-highcpu-32
  • n2-standard-4
  • n2-standard-8
  • n2-standard-16
  • n2-standard-32
  • n2-standard-48
  • n2-standard-64
  • n2-standard-80
  • n2-highmem-2
  • n2-highmem-4
  • n2-highmem-8
  • n2-highmem-16
  • n2-highmem-32
  • n2-highmem-48
  • n2-highmem-64
  • n2-highmem-80
  • n2-highcpu-16
  • n2-highcpu-32
  • n2-highcpu-48
  • n2-highcpu-64
  • n2-highcpu-80
  • n1-standard-4
  • n1-standard-8
  • n1-standard-16
  • n1-standard-32
  • n1-standard-64
  • n1-standard-96
  • n1-highmem-2
  • n1-highmem-4
  • n1-highmem-8
  • n1-highmem-16
  • n1-highmem-32
  • n1-highmem-64
  • n1-highmem-96
  • n1-highcpu-16
  • n1-highcpu-32
  • n1-highcpu-64
  • n1-highcpu-96
  • c2-standard-4
  • c2-standard-8
  • c2-standard-16
  • c2-standard-30
  • c2-standard-60

Weitere Informationen zu den technischen Spezifikationen jedes Maschinentyps finden Sie in der Compute Engine-Dokumentation zu Maschinentypen. Weitere Informationen zu den Kosten für die Verwendung der einzelnen Maschinentypen finden Sie unter Preise.

In den folgenden Beispielen wird gezeigt, wo Sie beim Erstellen eines CustomJob einen Maschinentyp angeben:

Console

In der Google Cloud Console können Sie CustomJob nicht direkt erstellen. Sie können jedoch eine TrainingPipeline erstellen, die einen CustomJob erstellt. Wenn Sie eine TrainingPipeline in der Cloud Console erstellen, geben Sie einen Maschinentyp für jeden Worker-Pool im Schritt Computing und Preise im Feld Maschinentyp ein.

gcloud

gcloud beta ai custom-jobs create \
  --region=LOCATION \
  --display-name=JOB_NAME \
  --worker-pool-spec=machine-type=MACHINE_TYPE,replica-count=REPLICA_COUNT,container-image-uri=CUSTOM_CONTAINER_IMAGE_URI

Node.js

/**
 * TODO(developer): Uncomment these variables before running the sample.\
 * (Not necessary if passing values as arguments)
 */

// const customJobDisplayName = 'YOUR_CUSTOM_JOB_DISPLAY_NAME';
// const containerImageUri = 'YOUR_CONTAINER_IMAGE_URI';
// const project = 'YOUR_PROJECT_ID';
// const location = 'YOUR_PROJECT_LOCATION';

// Imports the Google Cloud Job Service Client library
const {JobServiceClient} = require('@google-cloud/aiplatform');

// Specifies the location of the api endpoint
const clientOptions = {
  apiEndpoint: 'us-central1-aiplatform.googleapis.com',
};

// Instantiates a client
const jobServiceClient = new JobServiceClient(clientOptions);

async function createCustomJob() {
  // Configure the parent resource
  const parent = `projects/${project}/locations/${location}`;
  const customJob = {
    displayName: customJobDisplayName,
    jobSpec: {
      workerPoolSpecs: [
        {
          machineSpec: {
            machineType: 'n1-standard-4',
            acceleratorType: 'NVIDIA_TESLA_K80',
            acceleratorCount: 1,
          },
          replicaCount: 1,
          containerSpec: {
            imageUri: containerImageUri,
            command: [],
            args: [],
          },
        },
      ],
    },
  };
  const request = {parent, customJob};

  // Create custom job request
  const [response] = await jobServiceClient.createCustomJob(request);

  console.log('Create custom job response');
  console.log(`${JSON.stringify(response)}`);
}
createCustomJob();

Python

from google.cloud import aiplatform

def create_custom_job_sample(
    project: str,
    display_name: str,
    container_image_uri: str,
    location: str = "us-central1",
    api_endpoint: str = "us-central1-aiplatform.googleapis.com",
):
    # The AI Platform services require regional API endpoints.
    client_options = {"api_endpoint": api_endpoint}
    # Initialize client that will be used to create and send requests.
    # This client only needs to be created once, and can be reused for multiple requests.
    client = aiplatform.gapic.JobServiceClient(client_options=client_options)
    custom_job = {
        "display_name": display_name,
        "job_spec": {
            "worker_pool_specs": [
                {
                    "machine_spec": {
                        "machine_type": "n1-standard-4",
                        "accelerator_type": aiplatform.gapic.AcceleratorType.NVIDIA_TESLA_K80,
                        "accelerator_count": 1,
                    },
                    "replica_count": 1,
                    "container_spec": {
                        "image_uri": container_image_uri,
                        "command": [],
                        "args": [],
                    },
                }
            ]
        },
    }
    parent = f"projects/{project}/locations/{location}"
    response = client.create_custom_job(parent=parent, custom_job=custom_job)
    print("response:", response)

Weitere Informationen finden Sie im Leitfaden zum Erstellen von CustomJob.

GPUs

Wenn Sie Ihren Trainingscode zur Verwendung von GPUs geschrieben haben, können Sie Ihren Worker-Pool so konfigurieren, dass auf jeder VM eine oder mehrere GPUs verwendet werden. Zur Verwendung von GPUs müssen Sie einen A2- oder N1-Maschinentyp verwenden.

Vertex AI unterstützt die folgenden GPU-Typen für benutzerdefiniertes Training:

  • NVIDIA_TESLA_A100
  • NVIDIA_TESLA_K80
  • NVIDIA_TESLA_P4
  • NVIDIA_TESLA_P100
  • NVIDIA_TESLA_T4
  • NVIDIA_TESLA_V100

Weitere Informationen zur technischen Spezifikation für jeden GPU-Typ finden Sie in der kurzen Dokumentation zu Compute Engine für GPUs. Weitere Informationen zu den Kosten für die Verwendung der einzelnen Maschinentypen für benutzerdefiniertes Training finden Sie unter Preise.

Geben Sie in Ihrem WorkerPoolSpec den GPU-Typ an, den Sie im Feld machineSpec.acceleratorType verwenden möchten, sowie die Anzahl der GPUs, die jede VM des Worker-Pools im Feld machineSpec.acceleratorCount verwenden soll. Ihre Auswahl für diese Felder muss jedoch die folgenden Einschränkungen erfüllen:

  • Der ausgewählte GPU-Typ muss an dem Ort verfügbar sein, an dem Sie benutzerdefiniertes Training durchführen. Nicht alle GPU-Typen sind in allen Regionen verfügbar. Weitere Informationen zur regionalen Verfügbarkeit.

  • Sie können in der Konfiguration nur eine bestimmte Anzahl von GPUs verwenden. Sie können beispielsweise 2 oder 4 NVIDIA_TESLA_T4-GPUs auf einer VM verwenden, aber nicht 3. Die für die einzelnen GPU-Typen gültigen acceleratorCount-Werte finden Sie in der unten stehenden Kompatibilitätstabelle.

  • Achten Sie darauf, dass Ihre GPU-Konfiguration für den verwendeten Maschinentyp ausreichend virtuelle CPUs und genügend Arbeitsspeicher bietet. Wenn Sie beispielsweise in Ihrem Worker-Pool den Maschinentyp n1-standard-32 verwenden, hat jede VM 32 virtuelle CPUs und 120 GB Arbeitsspeicher. Da jede NVIDIA_TESLA_V100-GPU bis zu 12 virtuelle CPUs und 76 GB Arbeitsspeicher bereitstellen kann, müssen Sie mindestens 4 GPUs für jede n1-standard-32-VM verwenden, um die Anforderungen zu erfüllen. (2 GPUs bieten nicht genügend Ressourcen und Sie können keine drei GPUs angeben.)

    Diese Anforderung wird in der unten stehenden Kompatibilitätstabelle beschrieben.

    Beachten Sie die folgenden zusätzlichen Einschränkungen bei der Verwendung von GPUs für benutzerdefiniertes Training, die sich von der Verwendung von GPUs mit Compute Engine unterscheiden:

    • Eine Konfiguration mit 8 NVIDIA_TESLA_K80-GPUs bietet in allen Regionen und Zonen nur bis zu 208 GB Arbeitsspeicher.
    • Eine Konfiguration mit 4 NVIDIA_TESLA_P100-GPUs bietet in allen Regionen und Zonen nur bis zu 64 virtuelle CPUs und bis zu 208 GB Arbeitsspeicher.

Die folgende Kompatibilitätstabelle enthält die gültigen Werte für machineSpec.acceleratorCount, abhängig von Ihren Auswahlmöglichkeiten für machineSpec.machineType und machineSpec.acceleratorType:

Gültige GPU-Anzahl für Maschinentypen
Maschinentyp NVIDIA_TESLA_A100 NVIDIA_TESLA_K80 NVIDIA_TESLA_P4 NVIDIA_TESLA_P100 NVIDIA_TESLA_T4 NVIDIA_TESLA_V100
a2-highgpu-1g 1
a2-highgpu-2g 2
a2-highgpu-4g 4
a2-highgpu-8g 8
a2-megagpu-16g 16
n1-standard-4 1, 2, 4, 8 1, 2, 4 1, 2, 4 1, 2, 4 1, 2, 4, 8
n1-standard-8 1, 2, 4, 8 1, 2, 4 1, 2, 4 1, 2, 4 1, 2, 4, 8
n1-standard-16 2, 4, 8 1, 2, 4 1, 2, 4 1, 2, 4 2, 4, 8
n1-standard-32 4, 8 2, 4 2, 4 2, 4 4, 8
n1-standard-64 4 4 8
n1-standard-96 4 4 8
n1-highmem-2 1, 2, 4, 8 1, 2, 4 1, 2, 4 1, 2, 4 1, 2, 4, 8
n1-highmem-4 1, 2, 4, 8 1, 2, 4 1, 2, 4 1, 2, 4 1, 2, 4, 8
n1-highmem-8 1, 2, 4, 8 1, 2, 4 1, 2, 4 1, 2, 4 1, 2, 4, 8
n1-highmem-16 2, 4, 8 1, 2, 4 1, 2, 4 1, 2, 4 2, 4, 8
n1-highmem-32 4, 8 2, 4 2, 4 2, 4 4, 8
n1-highmem-64 4 4 8
n1-highmem-96 4 4 8
n1-highcpu-16 2, 4, 8 1, 2, 4 1, 2, 4 1, 2, 4 2, 4, 8
n1-highcpu-32 4, 8 2, 4 2, 4 2, 4 4, 8
n1-highcpu-64 8 4 4 4 8
n1-highcpu-96 4 4 8

In den folgenden Beispielen wird gezeigt, wo Sie GPUs angeben können, wenn Sie einen CustomJob erstellen:

Console

In der Cloud Console können Sie CustomJob nicht direkt erstellen. Sie können jedoch ein TrainingPipeline erstellen, das eine CustomJob erstellt. Wenn Sie eine TrainingPipeline in der Cloud Console erstellen, können Sie im Schritt Computing und Preise GPUs für jeden Worker-Pool angeben. Geben Sie zuerst einen Maschinentyp an. Anschließend können Sie GPU-Details in den Feldern Beschleunigertyp und Beschleunigeranzahl angeben.

gcloud

Verwenden Sie zur Angabe von GPUs mit dem gcloud-Befehlszeilentool eine config.yaml-Datei. Beispiel:

config.yaml

workerPoolSpecs:
  machineSpec:
    machineType: MACHINE_TYPE
    acceleratorType: ACCELERATOR_TYPE
    acceleratorCount: ACCELERATOR_COUNT
  replicaCount: REPLICA_COUNT
  containerSpec:
    imageUri: CUSTOM_CONTAINER_IMAGE_URI

Führen Sie dann einen Befehl wie den folgenden aus:

gcloud beta ai custom-jobs create \
  --region=LOCATION \
  --display-name=JOB_NAME \
  --config=config.yaml

Node.js

/**
 * TODO(developer): Uncomment these variables before running the sample.\
 * (Not necessary if passing values as arguments)
 */

// const customJobDisplayName = 'YOUR_CUSTOM_JOB_DISPLAY_NAME';
// const containerImageUri = 'YOUR_CONTAINER_IMAGE_URI';
// const project = 'YOUR_PROJECT_ID';
// const location = 'YOUR_PROJECT_LOCATION';

// Imports the Google Cloud Job Service Client library
const {JobServiceClient} = require('@google-cloud/aiplatform');

// Specifies the location of the api endpoint
const clientOptions = {
  apiEndpoint: 'us-central1-aiplatform.googleapis.com',
};

// Instantiates a client
const jobServiceClient = new JobServiceClient(clientOptions);

async function createCustomJob() {
  // Configure the parent resource
  const parent = `projects/${project}/locations/${location}`;
  const customJob = {
    displayName: customJobDisplayName,
    jobSpec: {
      workerPoolSpecs: [
        {
          machineSpec: {
            machineType: 'n1-standard-4',
            acceleratorType: 'NVIDIA_TESLA_K80',
            acceleratorCount: 1,
          },
          replicaCount: 1,
          containerSpec: {
            imageUri: containerImageUri,
            command: [],
            args: [],
          },
        },
      ],
    },
  };
  const request = {parent, customJob};

  // Create custom job request
  const [response] = await jobServiceClient.createCustomJob(request);

  console.log('Create custom job response');
  console.log(`${JSON.stringify(response)}`);
}
createCustomJob();

Python

from google.cloud import aiplatform

def create_custom_job_sample(
    project: str,
    display_name: str,
    container_image_uri: str,
    location: str = "us-central1",
    api_endpoint: str = "us-central1-aiplatform.googleapis.com",
):
    # The AI Platform services require regional API endpoints.
    client_options = {"api_endpoint": api_endpoint}
    # Initialize client that will be used to create and send requests.
    # This client only needs to be created once, and can be reused for multiple requests.
    client = aiplatform.gapic.JobServiceClient(client_options=client_options)
    custom_job = {
        "display_name": display_name,
        "job_spec": {
            "worker_pool_specs": [
                {
                    "machine_spec": {
                        "machine_type": "n1-standard-4",
                        "accelerator_type": aiplatform.gapic.AcceleratorType.NVIDIA_TESLA_K80,
                        "accelerator_count": 1,
                    },
                    "replica_count": 1,
                    "container_spec": {
                        "image_uri": container_image_uri,
                        "command": [],
                        "args": [],
                    },
                }
            ]
        },
    }
    parent = f"projects/{project}/locations/{location}"
    response = client.create_custom_job(parent=parent, custom_job=custom_job)
    print("response:", response)

Weitere Informationen finden Sie im Leitfaden zum Erstellen von CustomJob.

Bootlaufwerksoptionen

Sie können die Bootlaufwerke für Ihre Trainings-VMs optional anpassen. Alle VMs in einem Worker-Pool verwenden den gleichen Typ und die gleiche Größe wie das Bootlaufwerk.

  • Geben Sie das Feld diskSpec.bootDiskType in Ihrem WorkerPoolSpec an, um den Typ des von jeder Trainings-VM verwendeten Bootlaufwerks anzupassen.

    Sie können dieses Feld auf pd-standard festlegen, um einen nichtflüchtigen Standardspeicher zu verwenden, der von einer Standardfestplatte gesichert wird, oder Sie setzen auf pd-ssd, um einen nichtflüchtigen SSD-Speicher durch ein SSD zu ersetzen. Der Standardwert ist pd-ssd.

    Die Verwendung von pd-ssd kann die Leistung verbessern, wenn Ihr Trainingscode Daten auf das Laufwerk liest und schreibt. Weitere Informationen zu Laufwerkstypen.

  • Passen Sie die Größe (in GB) des von jeder Trainings-VM verwendeten Bootlaufwerks an. Geben Sie den Parameter im Feld diskSpec.bootDiskSizeGb in Ihrem WorkerPoolSpec an.

    Für dieses Feld können Sie eine Ganzzahl zwischen 100 und 64.000 (einschließlich) angeben. Der Standardwert ist 100.

    Sie können die Größe des Bootlaufwerks erhöhen, wenn Ihr Trainingscode viele temporäre Daten auf das Laufwerk schreibt. Alle Daten, die Sie auf das Bootlaufwerk schreiben, sind temporär und können nach Abschluss des Trainings nicht mehr abgerufen werden.

Die Änderung des Typs und der Größe Ihrer Bootlaufwerke wirkt sich auf die benutzerdefinierten Trainingspreise aus.

Die folgenden Beispiele zeigen, wo Sie beim Erstellen eines CustomJob Optionen für Bootlaufwerke angeben können:

Console

In der Cloud Console können Sie CustomJob nicht direkt erstellen. Sie können jedoch ein TrainingPipeline erstellen, das eine CustomJob erstellt. Wenn Sie eine TrainingPipeline in der Cloud Console erstellen, können Sie Optionen für Bootlaufwerke für jeden Worker-Pool im Schritt Computing und Preise in der Drop-down-Liste Laufwerkstyp und im Feld Laufwerksgröße (GB) festlegen.

gcloud

Zum Festlegen von Bootlaufwerkoptionen mit dem gcloud-Befehlszeilentool müssen Sie eine config.yaml-Datei verwenden. Beispiel:

config.yaml

workerPoolSpecs:
  machineSpec:
    machineType: MACHINE_TYPE
  diskSpec:
    bootDiskType: DISK_TYPE
    bootDiskSizeGb: DISK_SIZE
  replicaCount: REPLICA_COUNT
  containerSpec:
    imageUri: CUSTOM_CONTAINER_IMAGE_URI

Führen Sie dann einen Befehl wie den folgenden aus:

gcloud beta ai custom-jobs create \
  --region=LOCATION \
  --display-name=JOB_NAME \
  --config=config.yaml

Weitere Informationen finden Sie im Leitfaden zum Erstellen von CustomJob.

Nächste Schritte

  • Weitere Informationen zum Ausführen eines benutzerdefinierten Trainings erhalten Sie unter CustomJob erstellen.