Questa pagina descrive quando e perché creare un'istanza deterministica modelli di machine learning. I modelli di istanza deterministici chiariscono in modo esplicito il tipo di app o servizi di terze parti su cui installare delle istanze quando viene eseguito il deployment del modello di istanza. Creando dati deterministici di esempio, riduci al minimo l'ambiguità e il comportamento inaspettato modelli di istanza.
Perché creare modelli di istanza deterministici
In generale, consigliamo di applicare le proprietà del modello di istanza espliciti e deterministici possibile. Se utilizzi una startup script nei modelli di istanza che installano o utilizzano servizi di terze parti, assicurati che questi script forniscano informazioni esplicite, come o la versione più recente dell'app da installare. Compute Engine può basarsi solo le informazioni definite nel modello e non ha alcun controllo sui riferimenti servizi di terze parti. Se il modello è troppo vago, viene usato potrebbe comportarsi in modo imprevisto.
Ad esempio, considera il comando seguente per creare un modello di istanza uno script di avvio che installa apache2 e utilizza un file ospitato su server esterno:
gcloud compute instance-templates create example-template-with-startup \
--image-family debian-9 \
--image-project debian-cloud \
--metadata startup-script='#! /bin/bash
sudo apt install -y apache2
scp myuser@108.59.87.185:index.php /var/www/'
Esistono due potenziali problemi con questo script di avvio:
- Lo script non definisce esplicitamente quale versione di apache2 installare,
e si basa sulla versione attuale disponibile nel repository
apt
. - Lo script fa affidamento su un file ospitato su una terza parte che non è sottoposto al controllo delle versioni potrebbe essere stato modificato dall'ultima volta che è stato utilizzato il modello di istanza.
Se utilizzi un gestore della scalabilità automatica, uno strumento non deterministico può causare l'aggiunta da parte del gestore della scalabilità automatica di nuove istanze a un gruppo di istanze gestite con un'interfaccia configurazione, ad esempio una versione diversa di apache2.
Analogamente, se hai applicato il modello a un gruppo di istanze gestite, il valore il gruppo a un modello diverso di servizio e poi decidi di eseguire il rollback al modello precedente, potresti terminare con istanze che usano una versione diversa del file apache2 o index.php rispetto a prima dell'aggiornamento perché le istanze recuperano sempre i dati più recenti all'avvio.
Evitare un comportamento ambiguo o imprevisto del modello di istanza
Per evitare comportamenti imprevisti del modello, utilizza uno dei seguenti metodi:
Utilizza immagini ottimizzate per il contenitore oppure Docker, con i tag Docker. Ad esempio, ti consigliamo di assegnare nuovi tag per ogni nuova build della tua immagine Docker e usa questi tag nella tua istanza anziché l'ultimo tag predefinito. Per un'immagine ottimizzata per i container, puoi fare riferimento esplicitamente a una particolare build della tua immagine nel file manifest . L'esempio seguente utilizza l'immagine Docker "myimage" alla versione con tag "version_2_1_3":
version: v1beta2 containers: - name: simple-echo image: myimage:version_2_1_3 [ rest of your manifest file ]
Creare un'immagine personalizzata da usare come immagine per il modello. È preferibile utilizzare gli script di avvio perché garantisce che tutte le istanze siano uguali. Gli script di avvio avere risultati diversi dopo gli aggiornamenti del pacchetto di distribuzione. Utilizza gli script di avvio nei modelli di istanza per la prototipazione e il rapido sviluppo. Inoltre, immagini personalizzate quando è tutto pronto per il deployment di servizi di qualità enterprise.
Se utilizzi script di avvio, valuta la possibilità di aggiornarli in modo che deterministici. Ad esempio, crea una nuova versione del modello precedente e specifica uno script di avvio deterministico come segue:
gcloud compute instance-templates create example-template-with-startup-2-1-3 \ --image-family debian-9 \ --image-project debian-cloud \ --metadata startup-script='#! /bin/bash sudo apt install -y apache2=2.2.20-1ubuntu1 scp myuser@108.59.87.185:version_2_1_3/index.php /var/www/'
dove "version_2_1_3" è una sottodirectory contenente script PHP per alla versione 2.1.3 del servizio.