Come funziona la memorizzazione nella cache delle chiamate - AWS HealthOmics

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Come funziona la memorizzazione nella cache delle chiamate

Per utilizzare la memorizzazione nella cache delle chiamate, devi creare una cache di esecuzione e configurarla per avere una posizione Amazon S3 associata per i dati memorizzati nella cache. Quando avvii un'esecuzione, specifichi la cache di esecuzione. Una cache di esecuzione non è dedicata a un unico flusso di lavoro. Le esecuzioni da più flussi di lavoro possono utilizzare la stessa cache.

Durante la fase di esportazione di un'esecuzione, il sistema esporta gli output delle attività completate nella posizione Amazon S3. Per esportare file di attività intermedi, dichiarali come output delle attività nella definizione del flusso di lavoro. La memorizzazione nella cache delle chiamate salva inoltre internamente i metadati e crea hash unici per ogni voce della cache.

Per ogni attività in esecuzione, il motore di workflow rileva se esiste una voce della cache corrispondente per questa attività. Se non esiste una voce di cache corrispondente, HealthOmics calcola l'operazione. Se è presente una voce della cache corrispondente, il motore recupera i risultati memorizzati nella cache.

Per abbinare le voci della cache, HealthOmics utilizza il meccanismo di hashing incluso nei motori di flusso di lavoro nativi. HealthOmicsestende queste implementazioni hash esistenti per tenere conto di HealthOmics variabili, come S3 ETags e container digest ECR.

HealthOmics supporta la memorizzazione nella cache delle chiamate per queste versioni linguistiche del flusso di lavoro:

  • versioni WDL 1.0, 1.1 e versione di sviluppo

  • Nextflow versione 23.10 e 24.10

  • Tutte le versioni CWL

Nota

HealthOmics non supporta la memorizzazione nella cache delle chiamate per i flussi di lavoro Ready2Run.

Modello di responsabilità condivisa

Esiste una responsabilità condivisa tra gli utenti e consiste nel determinare se le attività e AWS le esecuzioni siano idonee per la memorizzazione nella cache delle chiamate. La memorizzazione nella cache delle chiamate consente di ottenere i migliori risultati quando tutte le attività sono idempotenti (le esecuzioni ripetute di un'attività utilizzando gli stessi input producono gli stessi risultati).

Tuttavia, se un'attività include elementi non deterministici (come generazioni di numeri casuali o l'ora del sistema), le esecuzioni ripetute dell'attività utilizzando gli stessi input possono generare output diversi. Ciò può influire sull'efficacia della memorizzazione nella cache delle chiamate nei seguenti modi:

  • Se HealthOmics utilizza una voce della cache (creata da un'esecuzione precedente) che non è identica all'output che l'esecuzione dell'attività produrrebbe per l'esecuzione corrente, l'esecuzione potrebbe produrre risultati diversi rispetto alla stessa esecuzione senza memorizzazione nella cache.

  • HealthOmics potrebbe non trovare una voce della cache corrispondente per un'attività che dovrebbe corrispondere, a causa degli output dell'attività non deterministici. Se non trova la voce di cache valida, run ricalcola inutilmente l'operazione, con conseguente riduzione dei vantaggi in termini di costi derivanti dall'utilizzo della memorizzazione nella cache delle chiamate.

Di seguito sono riportati i comportamenti noti delle attività che possono causare risultati non deterministici che influiscono sui risultati della memorizzazione nella cache delle chiamate:

  • Utilizzo di generatori di numeri casuali.

  • Dipendenza dall'ora del sistema.

  • Utilizzo della concorrenza (le condizioni di gara possono causare variazioni nell'output).

  • Recupero di file locali o remoti oltre a quanto specificato nei parametri di input dell'attività.

Per altri scenari che possono causare comportamenti non deterministici, consulta Input di processo non deterministici nel sito di documentazione di Nextflow.

Se sospetti che un'attività produca output non deterministici, prendi in considerazione l'utilizzo delle funzionalità del motore di flusso di lavoro, come la disattivazione della cache in Nextflow, per evitare di memorizzare nella cache attività specifiche non deterministiche.

Ti consigliamo di esaminare attentamente i requisiti specifici del flusso di lavoro e delle attività prima di abilitare la memorizzazione nella cache delle chiamate in qualsiasi ambiente in cui una memorizzazione inefficace nella cache delle chiamate o output diversi dal previsto possono comportare rischi. Ad esempio, è necessario considerare attentamente le potenziali limitazioni della memorizzazione nella cache delle chiamate per determinare se la memorizzazione nella cache delle chiamate sia appropriata per i casi d'uso clinico.

Requisiti di memorizzazione nella cache per le attività

HealthOmics memorizza nella cache gli output delle attività che soddisfano i seguenti requisiti:

  • L'attività deve definire un contenitore. HealthOmics non memorizzerà nella cache gli output di un'attività senza contenitore.

  • L'attività deve produrre uno o più output. Gli output delle attività vengono specificati nella definizione del flusso di lavoro.

  • La definizione del flusso di lavoro non deve utilizzare valori dinamici. Ad esempio, se si passa un parametro a un'attività con un valore che aumenta ad ogni esecuzione, HealthOmics non memorizza nella cache gli output dell'attività.

Nota

Se più attività in un'esecuzione utilizzano la stessa immagine del contenitore, HealthOmics fornisce la stessa versione dell'immagine a tutte queste attività. Dopo aver HealthOmics estratto l'immagine, ignora tutti gli aggiornamenti all'immagine del contenitore per tutta la durata dell'esecuzione. Questo approccio offre un'esperienza prevedibile e coerente e previene i potenziali problemi che potrebbero derivare dagli aggiornamenti dell'immagine del contenitore distribuiti durante l'esecuzione.

Esegui le prestazioni della cache

Quando attivi la memorizzazione nella cache delle chiamate per una corsa, potresti notare i seguenti impatti sulle prestazioni di esecuzione:

  • Durante la prima esecuzione, HealthOmics salva i dati della cache per le attività in esecuzione. È possibile che si verifichino tempi di esportazione più lunghi per questa esecuzione, poiché la memorizzazione nella cache delle chiamate aumenta la quantità di dati di esportazione.

  • Nelle esecuzioni successive, quando si riprende un'esecuzione dalla cache, è possibile ridurre il numero di fasi di elaborazione e ridurre il tempo di esecuzione.

  • Se scegli di dichiarare anche i file intermedi come output, i tempi di esportazione potrebbero essere ancora più lunghi, poiché questi dati possono essere più dettagliati.

Eventi di conservazione e invalidazione dei dati della cache

Lo scopo principale di una cache di esecuzione è ottimizzare il calcolo delle attività in esecuzione. Se esiste una voce di cache valida corrispondente per un'attività, HealthOmics utilizza la voce della cache anziché ricalcolare l'attività. In caso contrario, HealthOmics torna al comportamento predefinito del servizio, che consiste nel ricalcolare l'attività e le attività da essa dipendenti. Utilizzando questo approccio, gli errori nella cache non causano il fallimento dell'esecuzione.

Ti consigliamo di gestire la dimensione della cache di esecuzione. Nel tempo, le voci della cache potrebbero non essere più valide a causa degli aggiornamenti del motore del flusso di lavoro o del HealthOmics servizio o a causa delle modifiche apportate durante l'esecuzione o le attività di esecuzione. Le seguenti sezioni forniscono ulteriori dettagli.

Aggiornamenti della versione manifesto e aggiornamento dei dati

Periodicamente, il HealthOmics servizio può introdurre nuove funzionalità o aggiornamenti del motore di flusso di lavoro che invalidano alcune o tutte le voci della cache di esecuzione. In questa situazione, è possibile che si verifichi un'unica perdita della cache nelle esecuzioni.

HealthOmics crea un file manifest JSON per ogni voce della cache. Per le esecuzioni iniziate dopo il 12 febbraio 2025, il file manifest include un parametro di versione. Se un aggiornamento del servizio invalida qualsiasi voce della cache, HealthOmics incrementa il numero di versione in modo da poter identificare le voci della cache legacy da rimuovere.

L'esempio seguente mostra un file manifesto con la versione impostata su 2:

{ "arn": "arn:aws:omics:us-west-2:12345678901:runCache/0123456/cacheEntry/1234567-195f-3921-a1fa-ffffcef0a6a4", "s3uri": "s3://example/1234567-d0d1-e230-d599-10f1539f4a32/1348677/4795326/7e8c69b1-145f-3991-a1fa-ffffcef0a6a4", "taskArn": "arn:aws:omics:us-west-2:12345678901:task/4567891", "workDir": "/mnt/workflow/1234567-d0d1-e230-d599-10f1539f4a32/workdir/call-TxtFileCopyTask/5w6tn5feyga7noasjuecdeoqpkltrfo3/wxz2fuddlo6hc4uh5s2lreaayczduxdm", "files": [ { "name": "output_txt_file", "path": "out/output_txt_file/outfile.txt", "etag": "ajdhyg9736b9654673b9fbb486753bc8" } ], "nextflowContext": {}, "otherOutputs": {}, "version": 2, }

Per le esecuzioni con voci della cache che non sono più valide, ricostruisci la cache per creare nuove voci valide. Eseguite i seguenti passaggi per ogni esecuzione:

  1. Avvia l'esecuzione una sola volta con la conservazione della cache impostata su CACHE ALWAYS. Questa esecuzione crea le nuove voci della cache.

  2. Per le esecuzioni successive, imposta la conservazione della cache sull'impostazione precedente (CACHE ALWAYS o CACHE ON FAILURE).

Per pulire le voci della cache che non sono più valide, puoi eliminare queste voci dalla cache del bucket Amazon S3. HealthOmics non riutilizza mai queste voci della cache. Se scegli di conservare le voci non valide, non vi è alcun impatto sulle tue esecuzioni.

Nota

La memorizzazione nella cache delle chiamate salva i dati di output delle attività nella posizione Amazon S3 specificata per la cache, il che comporta costi a carico dell'utente. Account AWS

Comportamento della cache di esecuzione

È possibile impostare il comportamento di esecuzione della cache per salvare gli output delle attività per le esecuzioni che non riescono (cache in caso di errore) o per tutte le esecuzioni (cache sempre). Quando si crea una cache di esecuzione, si imposta il comportamento predefinito della cache per tutte le esecuzioni che utilizzano tale cache. È possibile sovrascrivere il comportamento predefinito quando si avvia un'esecuzione.

Cache on failureè utile se si esegue il debug di un flusso di lavoro che non riesce dopo che diverse attività sono state completate correttamente. L'esecuzione successiva riprende dall'ultima attività completata con successo se tutte le variabili univoche considerate dall'hash sono identiche all'esecuzione precedente.

Cache alwaysè utile se si aggiorna un'attività in un flusso di lavoro che viene completato correttamente. Ti consigliamo di seguire questi passaggi:

  1. Crea una nuova corsa. Imposta sempre il comportamento della cache su Cache e avvia l'esecuzione.

  2. Al termine dell'esecuzione, aggiorna l'attività nel flusso di lavoro e avvia una nuova esecuzione con il comportamento impostato su Cache always. Questa esecuzione elabora l'attività aggiornata e tutte le attività successive che dipendono dall'attività aggiornata. Tutte le altre attività utilizzano i risultati memorizzati nella cache.

  3. Ripetere il passaggio 2 come richiesto, fino al completamento dello sviluppo dell'attività aggiornata.

  4. Utilizza l'attività aggiornata in base alle esigenze per le esecuzioni future. Ricorda di passare alla cache le esecuzioni successive in caso di errore se prevedi di utilizzare input nuovi o diversi per queste esecuzioni.

Nota

Consigliamo la modalità Cache always quando si utilizza lo stesso set di dati di test, ma non per un batch di esecuzioni. Se imposti questa modalità per un grande batch di esecuzioni, il sistema può esportare grandi quantità di dati su Amazon S3, con conseguente aumento dei tempi di esportazione e dei costi di storage.

Controlla le dimensioni della cache di esecuzione

HealthOmics non elimina o archivia automaticamente i dati di esecuzione della cache né applica le regole di pulizia di Amazon S3 per la gestione dei dati della cache. Ti consigliamo di eseguire regolarmente la pulizia della cache per risparmiare sui costi di storage di Amazon S3 e per mantenere gestibili le dimensioni della cache di esecuzione. Puoi eliminare i file direttamente o impostare retention/replication le politiche relative ai dati nel bucket run cache.

Ad esempio, puoi configurare una policy del ciclo di vita di Amazon S3 per far scadere gli oggetti dopo 90 giorni oppure puoi pulire manualmente i dati della cache alla fine di ogni progetto di sviluppo.

Le seguenti informazioni possono aiutarti a gestire le dimensioni dei dati della cache:

  • Puoi visualizzare la quantità di dati presenti nella cache controllando Amazon S3. HealthOmics non monitora né segnala le dimensioni della cache.

  • Se si elimina una voce di cache valida, l'esecuzione successiva non ha esito negativo. HealthOmics ricalcola l'attività e le relative attività dipendenti.

  • Se modificate i nomi della cache o le strutture di directory in modo tale da non HealthOmics trovare una voce corrispondente per un'attività, HealthOmics ricalcola l'attività.

Se devi verificare se una voce della cache è ancora valida, controlla il numero di versione del manifesto della cache. Per ulteriori informazioni, consulta Aggiornamenti della versione manifesto e aggiornamento dei dati.