Databricks Container Services per risorse di calcolo dedicate

Nota

È disponibile anche una versione beta di Databricks Container Services per il calcolo in modalità di accesso standard . Vedere Databricks Container Services per il calcolo standard.

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 ulteriori informazioni sull'utilizzo del calcolo GPU con Databricks Container Services, vedere Databricks Container Services con 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.
  • La macchina deve eseguire una versione recente del demone Docker (una versione testata e funzionante con Client/Server versione 18.03.0-ce) e il comando docker deve essere disponibile nel PATH.

Limiti

  • Databricks Container Services non è supportato nel calcolo usando la modalità di accesso standard (in precedenza modalità di accesso condiviso).
  • Databricks Runtime for Machine Learning non è supportato da 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.
  • Per accedere ai metastore Hive federati in Databricks Container Services, aggiungere la configurazione seguente al campo di configurazione spark del calcolo: spark.databricks.unityCatalog.hms.federation.enabled true.
  • 172.17.0.0/16 è l'intervallo IP predefinito usato da Docker. Per evitare problemi di connettività a causa di un conflitto IP, evitare di configurare le risorse in questa subnet.
  • Databricks Container Services non supporta l'autenticazione del notebook.

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 16.4-LTS tag per un'immagine destinata a un calcolo con Databricks Runtime 16.4 LTS:

FROM databricksruntime/standard:16.4-LTS
...

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:16.4-LTS contenitore, includere quanto segue:

RUN /databricks/python3/bin/pip install pandas
RUN /databricks/python3/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 su Docker Hub i cui tag hanno il suffisso "-LTS" verranno aggiornate con 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 usando 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, specifica una versione di Databricks Runtime che supporti Databricks Container Services.

  2. In avanzate, selezionare la scheda Docker.

  3. Selezionare Usa il proprio contenitore Docker.

  4. Nel campo URL dell'immagine Docker, immetti la tua immagine Docker personalizzata.

    Esempi di URL immagine Docker:

    Registro Formato del tag
    Docker Hub <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. Consultare l'autenticazione delle immagini Docker.

Avviare il calcolo usando l'API

  1. Genera 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": "16.4.x-scala2.12"
    }'
    

Autenticazione dell'immagine Docker

I requisiti di autenticazione dipendono dal tipo di immagine Docker. È anche possibile usare i segreti per archiviare nomi utente e password di autenticazione. Vedere Usare i segreti per l'autenticazione.

  • Per le immagini Docker pubbliche, non è necessario includere informazioni di autenticazione. Nell'interfaccia utente impostare Authentication su Default. Per la chiamata API, non includere i campi basic_auth.
  • Per le immagini Docker private, eseguire l'autenticazione usando un ID del principale del servizio e una password (o segreti applicabili) che fungano da nome utente e password.
  • Per Registro Azure Container, eseguire l'autenticazione usando un ID entità servizio e una password (o segreti applicabili) per il nome utente e la password. Per informazioni su come creare l'entità servizio, vedere la documentazione sull'autenticazione dell'entità servizio di Registro Azure Container.

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 nell'interfaccia utente, usare il campo autenticazione per selezionare nome utente e password, quindi invece di immettere il nome utente o la password di testo normale, immettere i segreti usando il formato {{secrets/<scope-name>/<dcs-secret>}}. Se utilizzi l'API, immetti i segreti nei campi basic_auth.

Per informazioni sulla creazione di segreti, vedere Secret management.

Usa uno script di inizializzazione

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. Utilizza uno script di 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 memorizzare script di inizializzazione 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 di inizializzazione vengono eseguiti. Vedere Cosa sono gli script init?.

Azure Databricks ignora le primitive Docker CMD e ENTRYPOINT.

Abilita servizi container

Un amministratore dell'area di lavoro può controllare se Databricks Container Services è abilitato per l'area di lavoro.

Gli amministratori dello spazio di lavoro possono abilitare o disabilitare Databricks Container Service usando Databricks CLI. In un corpo della richiesta JSON specificare enableDcs su true, come nell'esempio seguente:

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