Condividi tramite


Personalizzare i contenitori con il servizio contenitore Databricks

Databricks Container Services consente di specificare un'immagine Docker quando si crea il calcolo. Alcuni casi d'uso di esempio includono:

  • Personalizzazione della libreria: si ha il controllo completo sulle librerie di sistema che si desidera installare.
  • Ambiente contenitore golden: l'immagine Docker è un ambiente bloccato che non cambierà mai.
  • Integrazione di Ci/CD Docker: è possibile integrare Azure Databricks con le pipeline docker CI/CD.

È anche possibile usare le immagini Docker per creare ambienti di Deep Learning personalizzati nel calcolo con dispositivi GPU. Per altre informazioni sull'uso del calcolo GPU con Databricks Container Services, vedere Databricks Container Services in calcolo GPU.

Per eseguire le attività ogni volta che viene avviato il contenitore, usare uno script init.

Requisiti

  • L'area di lavoro di Azure Databricks deve avere Databricks Container Services abilitato.
  • Il computer deve eseguire un daemon Docker recente (uno testato e funziona con Client/Server versione 18.03.0-ce) e il docker comando deve essere disponibile nel .PATH

Limiti

  • Databricks Container Services non è supportato nel calcolo usando la modalità di accesso condiviso.
  • Databricks Runtime per Machine Learning non supporta Databricks Container Services.
  • Per accedere ai volumi in Databricks Container Services, aggiungere la configurazione seguente al campo di configurazione Spark del calcolo: spark.databricks.unityCatalog.volumes.enabled true.

Passaggio 1: Creare la base

Databricks consiglia di creare la base Docker da una base compilata e testata da Databricks. È anche possibile creare la base Docker da zero. In questa sezione vengono descritte le due opzioni.

Opzione 1. Usare una base compilata da Databricks

Questo esempio usa il 9.x tag per un'immagine che verrà destinata a un ambiente di calcolo con versione di runtime Databricks Runtime 9.1 LTS e versioni successive:

FROM databricksruntime/standard:9.x
...

Per specificare librerie Python aggiuntive, ad esempio la versione più recente di pandas e urllib, usare la versione specifica del contenitore di pip. Per il databricksruntime/standard:9.x contenitore, includere quanto segue:

RUN /databricks/python3/bin/pip install pandas
RUN /databricks/python3/bin/pip install urllib3

Per il databricksruntime/standard:8.x contenitore o versione precedente, includere quanto segue:

RUN /databricks/conda/envs/dcs-minimal/bin/pip install pandas
RUN /databricks/conda/envs/dcs-minimal/bin/pip install urllib3

Le immagini di base sono ospitate nell'hub Docker all'indirizzo https://hub.docker.com/u/databricksruntime. I Dockerfile usati per generare queste basi si trovano in https://github.com/databricks/containers.

Nota

Le immagini ospitate nell'hub Docker con tag con suffisso "-LTS" verranno applicate patch. Tutte le altre immagini sono esempi e non vengono applicate regolarmente patch.

Nota

Le immagini databricksruntime/standard di base e databricksruntime/minimal non devono essere confuse con gli ambienti non correlati databricks-standard e databricks-minimal inclusi in Databricks Runtime non più disponibili con Conda (Beta).

Opzione 2. Creare una base Docker personalizzata

È anche possibile compilare la base Docker da zero. L'immagine Docker deve soddisfare questi requisiti:

Per creare un'immagine personalizzata da zero, è necessario creare l'ambiente virtuale. È anche necessario includere pacchetti integrati nel calcolo di Databricks, ad esempio Python e R. Per iniziare, è possibile usare l'immagine di base appropriata:

  • Per R: databricksruntime/rbase
  • Per Python: databricksruntime/python
  • Per l'immagine minima compilata da Databricks: databricksruntime/minimal

È anche possibile fare riferimento ai Dockerfile di esempio in GitHub.

Nota

Databricks consiglia di usare Ubuntu Linux; Tuttavia, è possibile usare Alpine Linux. Per usare Alpine Linux, è necessario includere questi file:

Inoltre, è necessario configurare Python, come illustrato in questo dockerfile di esempio.

Avviso

Testare accuratamente l'immagine del contenitore personalizzato in un ambiente di calcolo di Azure Databricks. Il contenitore può funzionare in un computer locale o di compilazione, ma quando il contenitore viene avviato in Azure Databricks l'avvio del calcolo potrebbe non riuscire, alcune funzionalità potrebbero diventare disabilitate o il contenitore potrebbe smettere di funzionare, anche in modo invisibile all'utente. Negli scenari peggiori, potrebbe danneggiare i dati o esporre accidentalmente i dati a parti esterne.

Passaggio 2: Eseguire il push dell'immagine di base

Eseguire il push dell'immagine di base personalizzata in un registro Docker. Questo processo è supportato con i registri seguenti:

  • Docker Hub senza autenticazione o autenticazione di base.
  • Registro Azure Container con autenticazione di base.

È previsto anche il funzionamento di altri registri Docker che non supportano alcuna autenticazione o autenticazione di base.

Nota

Se si usa l'hub Docker per il registro Docker, assicurarsi di verificare che i limiti di frequenza corrispondano alla quantità di calcolo prevista per l'avvio in un periodo di sei ore. Questi limiti di frequenza sono diversi per gli utenti anonimi, gli utenti autenticati senza una sottoscrizione a pagamento e le sottoscrizioni a pagamento. Per informazioni dettagliate, vedere la documentazione di Docker. Se questo limite viene superato, si otterrà una risposta "429 Troppe richieste".

Passaggio 3: Avviare il calcolo

È possibile avviare il calcolo usando l'interfaccia utente o l'API.

Avviare il calcolo usando l'interfaccia utente

  1. Nella pagina Crea calcolo specificare una versione di Databricks Runtime che supporta i servizi contenitore Databricks.

  2. In Opzioni avanzate selezionare la scheda Docker .

  3. Selezionare Usa il proprio contenitore Docker.

  4. Nel campo URL immagine Docker immettere l'immagine Docker personalizzata.

    Esempi di URL immagine Docker:

    Registro Formato tag
    Hub docker <organization>/<repository>:<tag> (ad esempio: databricksruntime/standard:latest)
    Registro Azure Container <your-registry-name>.azurecr.io/<repository-name>:<tag>
  5. Selezionare il tipo di autenticazione. È possibile usare i segreti per archiviare valori di autenticazione con nome utente e password. Vedere Usare i segreti per l'autenticazione.

Avviare il calcolo usando l'API

  1. Generare un token API.

  2. Usare l'interfaccia della riga di comando di Databricks per avviare un ambiente di calcolo con la base Docker personalizzata.

    databricks clusters create \
    --cluster-name <cluster-name> \
    --node-type-id Standard_DS3_v2 \
    --json '{
      "num_workers": 0,
      "docker_image": {
        "url": "databricksruntime/standard:latest",
        "basic_auth": {
          "username": "<docker-registry-username>",
          "password": "<docker-registry-password>"
        }
      },
      "spark_version": "14.3.x-scala2.12"
    }'
    

    basic_auth i requisiti dipendono dal tipo di immagine Docker:

    • Per le immagini Docker pubbliche, non includere il basic_auth campo .
    • Per le immagini Docker private, è necessario includere il basic_auth campo usando un ID entità servizio e una password come nome utente e password.
    • Per Registro Azure Container, è necessario impostare il basic_auth campo sull'ID e la password per un'entità servizio. Per informazioni sulla creazione dell'entità servizio, vedere Registro Azure Container documentazione sull'autenticazione dell'entità servizio.
    • È anche possibile usare un segreto per archiviare le informazioni di autenticazione. Vedere Usare i segreti per l'autenticazione.

Usare uno script init

Databricks Container Services consente ai clienti di includere script init nel contenitore Docker. Nella maggior parte dei casi, è consigliabile evitare script init e apportare personalizzazioni direttamente tramite Docker (usando dockerfile). Tuttavia, alcune attività devono essere eseguite all'avvio del contenitore, anziché al momento della compilazione del contenitore. Usare uno script init per queste attività.

Si supponga, ad esempio, di voler eseguire un daemon di sicurezza all'interno di un contenitore personalizzato. Installare e compilare il daemon nell'immagine Docker tramite la pipeline di compilazione di immagini. Aggiungere quindi uno script init che avvia il daemon. In questo esempio lo script init include una riga come systemctl start my-daemon.

Nell'API è possibile specificare script init come parte della specifica di calcolo come indicato di seguito. Per altre informazioni, vedere l'API Clusters.

"init_scripts": [
    {
        "file": {
            "destination": "file:/my/local/file.sh"
        }
    }
]

Per le immagini di Databricks Container Services, è anche possibile archiviare script init nell'archiviazione cloud.

Quando si avvia un ambiente di calcolo che usa Databricks Container Services, eseguire i passaggi seguenti:

  1. Le macchine virtuali vengono acquisite dal provider di servizi cloud.
  2. L'immagine Docker personalizzata viene scaricata dal repository.
  3. Azure Databricks crea un contenitore Docker dall'immagine.
  4. Il codice di Databricks Runtime viene copiato nel contenitore Docker.
  5. Gli script init vengono eseguiti. Vedere Cosa sono gli script init?.

Azure Databricks ignora le primitive e ENTRYPOINT DockerCMD.

Usare i segreti per l'autenticazione

Il servizio Contenitore Databricks supporta l'uso di segreti per l'autenticazione. Quando si crea la risorsa di calcolo, anziché immettere il nome utente o la password di testo normale, immettere il segreto usando il {{secrets/<scope-name>/<dcs-secret>}} formato . Per informazioni sulla creazione di segreti, vedere Gestire i segreti.

Abilitare Servizi contenitore

Per usare contenitori personalizzati nell'ambiente di calcolo, un amministratore dell'area di lavoro deve abilitare Databricks Container Services.

Gli amministratori dell'area di lavoro possono abilitare il servizio contenitore Databricks usando l'interfaccia della riga di comando di Databricks. In un corpo della richiesta JSON specificare enableDcs su true, come nell'esempio seguente:

databricks workspace-conf set-status \
--json '{"enableDcs": "true"}'