Questo documento descrive come implementare i casi d'uso comuni utilizzando l'API Cloud Quotas. Questa API consente di modificare le quote a livello di programmazione e automatizzare le modifiche delle quote nei Google Cloud progetti, nelle cartelle o nell'organizzazione.
Per saperne di più, consulta la panoramica e il riferimento dell'API Cloud Quotas.
Limitazioni
Cloud Quotas presenta le seguenti limitazioni:
Nella maggior parte dei casi, le modifiche di aumento della quota devono essere apportate a livello di progetto. Un numero limitato di prodotti supporta le modifiche di aumento della quota a livello di organizzazione. Per verificare se un Google Cloud prodotto supporta le modifiche di aumento della quota a livello di organizzazione, consulta la documentazione del prodotto.
Puoi richiedere modifiche di riduzione della quota per le quote a livello di cartella, organizzazione e progetto.
Monitorare l'utilizzo e richiedere un aumento quando l'utilizzo supera l'80%
Questo esempio monitora l'utilizzo delle quote con Cloud Monitoring e poi richiede un aumento quando l'utilizzo supera l'80%.
Chiama la risorsa
QuotaInfoper il tuo servizio per determinare ilquotaValuecorrente. Il servizio in questo esempio ècompute.googleapis.com:GET projects/PROJECT_NUMBER/locations/global/services/compute.googleapis.com/quotaInfosSostituisci
PROJECT_NUMBERcon il numero di progetto del tuo progetto.Per trovare le CPU per progetto e le località applicabili, cerca nella risposta
QuotaInfol'ID quotaCPUS-per-project-region. IlquotaValueè 20."quotaInfos": [ ... { "name": "projects/PROJECT_NUMBER/locations/global/services/compute.googleapis.com/quotaInfos/CPUS-per-project-region", "quotaId": "CPUS-per-project-region", "metric": "compute.googleapis.com/cpus", "containerType": "PROJECT", "dimensions": [ "region" ], "dimensionsInfo": [ { "dimensions": [], "details": { "quotaValue": 20, "resetValue": 20 }, "applicableLocations": [ "us-central1", "us-central2", "us-west1", "us-east1" ] } ] }, ... ]
Chiama l'API Cloud Monitoring per trovare l'utilizzo delle quote. Nell'esempio seguente è stata specificata la regione
us-central1. Le metriche delle quote supportate sono elencate inserviceruntime.{ "name": "projects/PROJECT_NUMBER" "filter": "metric.type=\"serviceruntime.googleapis.com/quota/allocation/usage\" AND metric.labels.quota_metric=\"compute.googleapis.com/cpus\" AND resource.type=\"consumer_quota\" AND resource.label.location=\"us-central1\" ", "interval": { "startTime": "2023-11-10T18:18:18.0000Z", "endTime": "2023-11-17T18:18:18.0000Z" }, "aggregation": { "alignmentPeriod": "604800s", // 7 days "perSeriesAligner": "ALIGN_MAX", "crossSeriesReducer": "REDUCE_MAX" } }
Per determinare l'utilizzo, gestisci la risposta dell'API Cloud Monitoring. Confronta il valore di Cloud Monitoring con il
quotaValuenei passaggi precedenti per determinare l'utilizzo.Nella seguente risposta di esempio, il valore di utilizzo in Cloud Monitoring è 19 nella regione
us-central1. IlquotaValueper tutte le regioni è 20. L'utilizzo è superiore all'80% della quota e può essere avviato un aggiornamento delle preferenze di quota.time_series { metric { labels { key: "quota_metric" value: "compute.googleapis.com/cpus" } type: "serviceruntime.googleapis.com/quota/allocation/usage" } resource { type: "consumer_quota" labels { key: "project_id" value: "PROJECT_ID" } labels { key: "location" value: "us-central1" } } metric_kind: GAUGE value_type: INT64 points { interval { start_time { seconds: "2023-11-10T18:18:18.0000Z" } end_time { seconds: "2023-11-17T18:18:18.0000Z" } } value { int64_value: 19 } } }
Per evitare preferenze di quota duplicate, chiama prima
ListQuotaPreferencesper verificare se sono presenti richieste in attesa. Il flagreconciling=truechiama le richieste in attesa.GET projects/PROJECT_NUMBER/locations/global/quotaPreferences?filter=service=%22compute.googleapis.com%22%20AND%20quotaId=%22CPUS-per-project-region%22%20AND%20reconciling=true
Sostituisci
PROJECT_NUMBERcon il numero di progetto del tuo progetto.Chiama
UpdateQuotaPreferenceper aumentare il valore della quota per la regioneus-central1. Nell'esempio seguente è stato specificato un nuovo valore preferito di 100.Il campo
allow_missingè impostato sutrue. In questo modo il sistema crea una risorsaQuotaPreferencese non ne esiste una con il nome fornito.PATCH projects/PROJECT_NUMBER/locations/global/quotaPreferences/compute_googleapis_com-cpus-us-central1?allowMissing=true { "service": "compute.googleapis.com", "quotaId": "CPUS-per-project-region", "quotaConfig": { "preferredValue": 100 }, "dimensions": { "region": "us-central1" }, "justification": "JUSTIFICATION", "contactEmail": "EMAIL" }
Sostituisci quanto segue:
PROJECT_NUMBER: l'identificatore univoco del tuo progetto.JUSTIFICATION: una stringa facoltativa che spiega la tua richiesta.EMAIL: un indirizzo email che può essere utilizzato come contatto, nel caso in cui Google Cloud siano necessarie ulteriori informazioni prima di poter concedere una quota aggiuntiva.
Chiama
GetQuotaPreferenceper controllare lo stato della modifica della preferenza di quota:GET projects/PROJECT_NUMBER/locations/global/quotaPreferences/compute_googleapis_com-cpus-us-central1Sostituisci
PROJECT_NUMBERcon il numero di progetto del tuo progetto.Mentre Google Cloud valuta il valore della quota richiesta, lo stato di riconciliazione della quota viene impostato su
true.A volte Google Cloud approva una parte della richiesta di aumento anziché approvare l'aumento completo o rifiuta completamente la richiesta. La preferenza di quota include un campo
stateDetailper descrivere lo stato finale della richiesta, ad esempio spiegando uno stato approvato parzialmente o fornendo i dettagli del motivo di un rifiuto. Il campograntedValuemostra la modifica apportata per soddisfare la tua richiesta.Per verificare se il valore concesso è il valore finale approvato, esamina il campo
reconciling. Se la richiesta è ancora in fase di valutazione, il camporeconcilingè impostato sutrue. Se il camporeconcilingè impostato sufalseo viene omesso, il valore concesso è il valore finale approvato.Nell'esempio seguente, il valore della quota richiesta è 100 e il campo
reconcilingindica che la richiesta è in fase di revisione."name": "projects/PROJECT_NUMBER/locations/global/quotaPreferences/compute_googleapis_com-cpus-us-central1", "service": "compute.googleapis.com", "quotaId": "CPUS-per-project-region", "quotaConfig": { "preferredValue": 100, "grantedValue": 50, "traceId": "123acd-345df23", "requestOrigin": "ORIGIN_UNSPECIFIED" }, "dimensions": { "region": "us-central1" }, "reconciling": true, "createTime": "2023-01-15T01:30:15.01Z", "updateTime": "2023-01-16T02:35:16.01Z"
Una volta elaborata la preferenza di quota, il campo
reconcilingviene impostato sufalse. IlgrantedValueè uguale alpreferredValue. La quota preferita è stata concessa completamente.Quando Google Cloud rifiuta o approva parzialmente una richiesta del cliente, il valore della quota concessa può comunque essere inferiore al valore preferito.
Ridurre una quota
L'esempio seguente riduce il numero di TPU a 10 in ogni regione.
Ottieni l'ID quota e il valore della quota corrente con una chiamata
ListQuotaInfos:GET projects/PROJECT_NUMBER/locations/global/services/compute.googleapis.com/quotaInfosSostituisci
PROJECT_NUMBERcon il numero di progetto del tuo progetto.Esamina i campi di risposta per trovare una voce
QuotaInfoperV2-TPUS-per-project-region."quotaInfos": [ ... { "name": "projects/PROJECT_NUMBER/locations/global/services/compute.googleapis.com/quotaInfos/V2-TPUS-per-project-region", "quotaId": "V2-TPUS-per-project-region", "metric": "compute.googleapis.com/Tpus", "containerType": "PROJECT", "dimensions": [ "region" ], "dimensionsInfo": [ { "dimensions": [], "details": { "quotaValue": 20, "resetValue": 20 }, "applicableLocations": [ "us-central1", "us-central2", "us-west1", "us-east1" ] } ] }, ... ]
In questa risposta, l'ID quota è
V2-TPUS-per-project-regione ilquotaValuecorrente è 20.Riduci la quota di TPU in ogni regione a 10 con una
CreateQuotaPreferenceRequest. ImpostapreferredValuesu 10.POST projects/PROJECT_NUMBER/locations/global/quotaPreferences?quotaPreferenceId=compute_googleapis_com-Tpu-all-regions { "quotaConfig": { "preferredValue": 10 }, "dimensions": [], "service": "compute.googleapis.com", "quotaId": "V2-TPUS-per-project-region", "justification": "JUSTIFICATION", "contactEmail": "EMAIL" }
Sostituisci quanto segue:
PROJECT_NUMBER: l'identificatore univoco del tuo progetto.JUSTIFICATION: una stringa facoltativa che spiega la tua richiesta.EMAIL: un indirizzo email che può essere utilizzato come contatto, nel caso in cui Google Cloud siano necessarie ulteriori informazioni prima di poter concedere una quota aggiuntiva.
Conferma il nuovo valore della quota con una chiamata
GetQuotaInfoche definisce l'ID quota comeV2-TPUS-per-project-region.GET projects/PROJECT_NUMBER/locations/global/services/compute.googleapis.com/quotaInfos/V2-TPUS-per-project-regionSostituisci
PROJECT_NUMBERcon il numero di progetto del tuo progetto.Di seguito è riportato un esempio di risposta, il
valueè 10 ed è applicabile in tutte le regioni."name": "projects/PROJECT_NUMBER/locations/global/services/compute.googleapis.com/quotaInfos/V2-TPUS-per-project-region", "quotaId": "V2-TPUS-per-project-region", "metric": "compute.googleapis.com/v2_tpus", "containerType": "PROJECT", "dimensions": [ "region" ], "dimensionsInfo": [ { "dimensions": [], "details": { "value": 10, }, "applicableLocations": [ "us-central1", "us-central2", "us-west1", "us-east1" ] } ]
Copiare le preferenze di quota in un altro progetto
L'esempio seguente copia tutte le preferenze di quota da un progetto a un altro. È scritto in Java, ma puoi utilizzare qualsiasi linguaggio di programmazione.
Chiama
ListQuotaPreferencessul progetto di origine senza filtro:GET projects/PROJECT_NUMBER1/locations/global/quotaPreferencesPROJECT_NUMBER1 è il numero di progetto del progetto di origine. La risposta contiene tutte le preferenze di quota per il progetto di origine.
Per ogni preferenza di quota nella risposta, chiama
UpdateQuotaPreferencee definisci i seguenti campi:name- Il campo del nome aggiornato viene ricavato dalla risposta e il numero del progetto di origine (PROJECT_NUMBER1) viene sostituito con il numero del progetto di destinazione (PROJECT_NUMBER2).service,quotaId,preferredValue,dimensions- Questi campi possono essere ricavati direttamente dalla risposta così come sono.
for (QuotaPreference srcPreference : listResponse.getQuotaPreferences()) { QuotaPreference.Builder targetPreference = QuotaPreference.newBuilder() .setName(srcPreference.getName().replace("PROJECT_NUMBER1", "PROJECT_NUMBER2")) .setService(srcPreference.getService()) .setQuotaId(srcPreference.getQuotaId()) .setJustification(srcPreference.getJustification()) .setContactEmail(srcPreference.getContactEmail()) .setQuotaConfig( QuotaConfig.newBuilder().setPreferredValue(srcPreference.getQuotaConfig().getPreferredValue())) .putAllDimensions(srcPreference.getDimensionsMap()); UpdateQuotaPreferenceRequest updateRequest = UpdateQuotaPreferenceRequest.newBuilder() .setQuotaPreference(targetPreference) .setAllowMissing(true) .build(); cloudQuotas.updateQuotaPreference(updateRequest); }
Chiama
ListQuotaPreferencesper verificare lo stato delle preferenze di quota per il progetto di destinazione:GET projects/PROJECT_NUMBER2/locations/global/quotaPreferencesSostituisci
PROJECT_NUMBER2con il numero di progetto del tuo progetto di destinazione.
Elencare le richieste di quota in attesa
Per elencare tutte le richieste di preferenza di quota in attesa per un progetto, chiama ListQuotaPreferences con il filtro reconciling=true.
GET projects/PROJECT_NUMBER/locations/global/quotaPreferences?reconciling=true
Sostituisci PROJECT_NUMBER con il numero di progetto del tuo progetto.
La risposta a questa richiesta restituisce l'ultima preferenza di quota in attesa. Poiché l'API Cloud Quotas è un'API dichiarativa, l'ultima preferenza di quota è quella che il sistema tenta di soddisfare.
Una risposta di esempio è simile alla seguente:
"quotaPreferences": [ { "name": "projects/PROJECT_NUMBER/locations/global/quotaPreferences/compute_googleapis_com-cpus-us-central1", "service": "compute.googleapis.com", "quotaId": "CPUS-per-project-region", "quotaConfig": { "preferredValue": 100, "grantedValue": 30, "traceId": "123acd-345df23", "requestOrigin": "ORIGIN_UNSPECIFIED" }, "dimensions": { "region": "us-central1" }, "reconciling": true, "createTime": "2023-01-15T01:30:15.01Z", "updateTime": "2023-01-16T02:35:16.01Z" }, { "name": "projects/PROJECT_NUMBER/locations/global/quotaPreferences/compute_googleapis_com-cpus-cross-regions", "service": "compute.googleapis.com", "quotaId": "CPUS-per-project-region", "quotaConfig": { "preferredValue": 10, "grantedValue": 5, "traceId": "456asd-678df43", "requestOrigin": "ORIGIN_UNSPECIFIED" }, "reconciling": true, "createTime": "2023-01-15T01:35:15.01Z", "updateTime": "2023-01-15T01:35:15.01Z" } ]
Richiedere aumenti di quota di gruppo
Per richiedere aumenti per un gruppo di quote in un nuovo progetto, archivia le quote preferite per il nuovo progetto in un file CSV con i seguenti valori: nome del servizio, ID quota, valore della quota preferita, dimensioni.
Per ogni riga del file CSV, leggi i contenuti nei campi serviceName, quotaId, preferredValue e dimensionMap.
CreateQuotaPreferenceRequest request = CreateQuotaPreferenceRequest.newBuilder() .setParent("projects/PROJECT_NUMBER/locations/global") .setQuotaPreferenceId(buildYourOwnQuotaPreferenceId(serviceName, quotaId, dimensionMap)) .setQuotaPreference( QuotaPreference.newBuilder() .setService(serviceName) .setQuotaId(quotaId) .setJustification(justification) .setContactEmail(contactEmail) .setQuotaConfig(QuotaConfig.newBuilder().setPreferredValue(preferredValue)) .putAllDimensions(dimensionMap)) .build(); cloudQuotas.createQuotaPreference(request);
Sostituisci PROJECT_NUMBER con il numero di progetto del tuo progetto.
Poiché il progetto di destinazione è nuovo, è sicuro chiamare il metodo CreateQuotaPreference mentre leggi e assegni i campi. In alternativa, puoi chiamare il metodo UpdateQuotaPreference con allow_missing impostato su true.
Il metodo buildYourOwnQuotaPreferenceId crea un ID preferenza di quota dal nome del servizio, dall'ID quota e da una mappa delle dimensioni in base allo schema di denominazione. In alternativa, puoi scegliere di non impostare l'ID preferenza di quota. Viene generato un ID preferenza di quota.
Richiedere modifiche alle quote senza utilizzo
Per le quote che non hanno ancora un utilizzo e che hanno dimensioni specifiche del servizio
come vm_family, è possibile che queste quote non
siano visibili nella Google Cloud console. Potresti dover utilizzare l'API Cloud Quotas.
Ad esempio, potresti clonare un progetto e sapere in anticipo che devi aumentare il valore di compute.googleapis.com/gpus_per_gpu_family.
Questo valore viene visualizzato nella Google Cloud console solo per le famiglie di GPU che hai
già utilizzato. Per utilizzare l'API Cloud Quotas per richiedere un aumento delle GPU NVIDIA_H100 in us-central1, puoi inviare una richiesta simile alla seguente:
POST projects/PROJECT_NUMBER/locations/global/quotaPreferences?quotaPreferenceId=compute_googleapis_com-gpus-us-central1-NVIDIA_H100 {
"service": "compute.googleapis.com",
"quotaId": "GPUS-PER-GPU-FAMILY-per-project-region",
"quotaConfig": { "preferredValue": 100 },
"dimensions": { "region": "us-central1", "gpu_family": "NVIDIA_H100" },
"justification": "JUSTIFICATION",
"contactEmail": "EMAIL"
}
Sostituisci quanto segue:
PROJECT_NUMBER: l'identificatore univoco del tuo progetto.JUSTIFICATION: una stringa facoltativa che spiega la tua richiesta.EMAIL: un indirizzo email che può essere utilizzato come contatto, nel caso in cui Google Cloud siano necessarie ulteriori informazioni prima di poter concedere una quota aggiuntiva.
Per saperne di più, consulta anche le descrizioni di Precedenza delle dimensioni e Combinazione di dimensioni.
Ottenere informazioni sulle quote per una dimensione specifica del servizio
La famiglia di GPU è una dimensione specifica del servizio. La seguente richiesta di esempio utilizza l'ID quota GPUS-PER-GPU-FAMILY-per-project-region per ottenere la risorsa QuotaInfo.
GET projects/PROJECT_NUMBER/locations/global/services/compute.googleapis.com/quotaInfos/GPUS-PER-GPU-FAMILY-per-project-regionSostituisci PROJECT_NUMBER con il numero di progetto del tuo progetto.
Di seguito è riportato un esempio di risposta. Per ogni chiave gpu_family univoca, quotaValue e applicableLocations sono diversi:
"name": "projects/PROJECT_NUMBER/locations/global/services/compute.googleapis.com/quotaInfos/GpusPerProjectPerRegion", "quotatName": "CPUS-per-project-region", "metric": "compute.googleapis.com/gpus_per_gpu_family", "isPrecise": true, "quotaDisplayName": "GPUs per GPU family", "metricDisplayName": "GPUs", "dimensions": [ "region", "gpu_family" ], "dimensionsInfo": [ { "dimensions": { "region": "us-central1", "gpu_family": "NVIDIA_H200" }, "details": { "quotaValue": 30, "resetValue": 30, }, "applicableLocations": [ "us-central1" ] }, { "dimensions": { "region": "us-central1" } "details": { "quotaValue": 100, "resetValue": 100, }, "applicableLocations": [ "us-central1" ] }, { "dimensions": { "gpu_familly": "NVIDIA_H100" } "details": { "quotaValue": 10, }, "applicableLocations": [ "us-central2", "us-west1", "us-east1" ] } { "dimensions": [], "details": { "quotaValue": 50, "resetValue": 50, }, "applicableLocations": [ "us-central1", "us-central2", "us-west1", "us-east1" ] } ]
Creare una preferenza di quota per una dimensione specifica del servizio
L'esempio seguente mostra come creare una quota per una determinata regione e famiglia di GPU con un valore preferito di 100. La località di destinazione è specificata nella mappa delle dimensioni con la chiave region e la famiglia di GPU di destinazione con la chiave gpu_family.
Il seguente esempio CreateQuotaPreference specifica una famiglia di GPU NVIDIA_H100 e una regione us-central1.
POST projects/PROJECT_NUMBER/locations/global/quotaPreferences?quotaPreferenceId=compute_googleapis_com-gpus-us-central1-NVIDIA_H100 { "service": "compute.googleapis.com", "quotaId": "GPUS-PER-GPU-FAMILY-per-project-region", "quotaConfig": { "preferredValue": 100 }, "dimensions": {"region": "us-central1", "gpu_family": "NVIDIA_H100"}, "justification": "JUSTIFICATION", "contactEmail": ""EMAIL" }
Sostituisci quanto segue:
PROJECT_NUMBER: l'identificatore univoco del tuo progetto.JUSTIFICATION: una stringa facoltativa che spiega la tua richiesta.EMAIL: un indirizzo email che può essere utilizzato come contatto, nel caso in cui Google Cloud siano necessarie ulteriori informazioni prima di poter concedere una quota aggiuntiva.
Aggiornare una preferenza di quota per una dimensione specifica del servizio
Il seguente codice campione ottiene il valore corrente per la dimensione
{"region" : "us-central1"; gpu_family:"NVIDIA_H100"},
e poi imposta il valore preferito sul doppio del valore. È scritto in Java, ma puoi utilizzare qualsiasi linguaggio di programmazione.
// Get the current quota value for the target dimensions Map<String, String> targetDimensions = Maps.createHashMap("region", "us-central1", "gpu_family", "NVIDIA_H100"); long currentQuotaValue = 0; QuotaInfo quotaInfo = cloudQuotas.GetQuotaInfo( "projects/PROJECT_NUMBER/locations/global/services/" + serviceName + "quotaInfos/" + quotaId; for (dimensionsInfo : quotaInfo.getDimensionsInfoList()) { If (targetDimensions.entrySet().containsAll(dimensionsInfo.getDimensionsMap().entrySet()) { currentQuotaValue = dimensionsInfo.getDetails().getValue(); break; }) } // Set the preferred quota value to double the current value for the target dimensions QuotaPreference.Builder targetPreference = QuotaPreference.newBuilder() .setName(buildYourOwnQuotaPreferenceId(serviceName, quotaId, targetDimensions)) .setService(serviceName) .setQuotaId(quotaId) .setJustification(justification) .setContactEmail(contactEmail) .setQuotaConfig(QuotaConfig.newBuilder().setPreferredValue(currentQuotaValue * 2)) .putAllDimensions(targetDimensions)); UpdateQuotaPreferenceRequest updateRequest = UpdateQuotaPreferenceRequest.newBuilder() .setQuotaPreference(targetPreference) .setAllowMissing(true) .build(); cloudQuotas.updateQuotaPreference(updateRequest);
Sostituisci PROJECT_NUMBER con l'identificatore univoco del tuo progetto.
Passaggi successivi
Informazioni sull'API Cloud Quotas
Riferimento all'API Cloud Quotas Cloud Quotas
Informazioni sulle quote