Dostosowywanie kontenerów za pomocą usługi Kontener usługi Databricks
Usługa Databricks Container Services umożliwia określenie obrazu platformy Docker podczas tworzenia obliczeń. Oto przykładowe przypadki użycia:
- Dostosowywanie biblioteki: masz pełną kontrolę nad bibliotekami systemowym, które chcesz zainstalować.
- Złote środowisko kontenera: obraz platformy Docker to zablokowane środowisko, które nigdy się nie zmieni.
- Integracja ciągłej integracji/ciągłego wdrażania platformy Docker: możesz zintegrować usługę Azure Databricks z potokami ciągłej integracji/ciągłego wdrażania platformy Docker.
Za pomocą obrazów platformy Docker można również tworzyć niestandardowe środowiska uczenia głębokiego na obliczeniach przy użyciu urządzeń z procesorem GPU. Aby uzyskać dodatkowe informacje na temat używania obliczeń procesora GPU z usługami Kontener Services usługi Databricks, zobacz Databricks Container Services on GPU compute (Usługi kontenerów usługi Databricks w obliczeniach procesora GPU).
Aby zadania, które mają być wykonywane przy każdym uruchomieniu kontenera, użyj skryptu init.
Wymagania
- Obszar roboczy usługi Azure Databricks musi mieć włączoną usługę Kontener Services usługi Databricks.
- Na komputerze musi być uruchomiony ostatni demon platformy Docker (testowany i współdziałający z klientem/serwerem w wersji 18.03.0-ce), a
docker
polecenie musi być dostępne w plikuPATH
.
Ograniczenia
- Usługi kontenerów usługi Databricks nie są obsługiwane w przypadku obliczeń przy użyciu trybu dostępu współdzielonego.
- Środowisko Databricks Runtime dla uczenia maszynowego nie obsługuje usług Kontener Services usługi Databricks.
- Aby uzyskać dostęp do woluminów w usługach Kontener Services usługi Databricks, dodaj następującą konfigurację do pola konfiguracji platformy Spark obliczeniowego:
spark.databricks.unityCatalog.volumes.enabled true
.
Krok 1. Tworzenie bazy
Usługa Databricks zaleca utworzenie bazy platformy Docker na podstawie bazy, którą usługa Databricks skompilowała i przetestowała. Istnieje również możliwość skompilowania bazy platformy Docker od podstaw. W tej sekcji opisano dwie opcje.
Sposób 1. Używanie bazy utworzonej przez usługę Databricks
W tym przykładzie użyto tagu 9.x
dla obrazu, który będzie przeznaczony dla środowiska obliczeniowego z wersją środowiska uruchomieniowego Databricks Runtime 9.1 LTS i nowszymi wersjami:
FROM databricksruntime/standard:9.x
...
Aby określić dodatkowe biblioteki języka Python, takie jak najnowsza wersja biblioteki pandas i urllib, użyj wersji specyficznej dla kontenera .pip
W przypadku kontenera databricksruntime/standard:9.x
uwzględnij następujące elementy:
RUN /databricks/python3/bin/pip install pandas
RUN /databricks/python3/bin/pip install urllib3
W przypadku kontenera lub niższego databricksruntime/standard:8.x
dołącz następujące elementy:
RUN /databricks/conda/envs/dcs-minimal/bin/pip install pandas
RUN /databricks/conda/envs/dcs-minimal/bin/pip install urllib3
Obrazy podstawowe są hostowane w usłudze Docker Hub pod adresem https://hub.docker.com/u/databricksruntime. Pliki Dockerfile używane do generowania tych baz znajdują się pod adresem https://github.com/databricks/containers.
Uwaga
Obrazy hostowane w usłudze Docker Hub z sufiksem "-LTS" zostaną poprawione. Wszystkie inne obrazy są przykładami i nie są regularnie poprawiane.
Uwaga
Obrazy databricksruntime/standard
podstawowe i databricksruntime/minimal
nie należy ich mylić z niepowiązanymi databricks-standard
środowiskami i databricks-minimal
nie są już dostępne w środowisku Databricks Runtime z conda (beta).
Sposób 2. Tworzenie własnej bazy platformy Docker
Możesz również utworzyć bazę platformy Docker od podstaw. Obraz platformy Docker musi spełniać następujące wymagania:
- Zestaw JDK 8u191 jako java w systemie
PATH
- bash
- iproute2 (ubuntu iproute)
- coreutils (ubuntu coreutils)
- procps (ubuntu procps)
- sudo (ubuntu sudo)
- Ubuntu Linux
Aby utworzyć własny obraz od podstaw, musisz utworzyć środowisko wirtualne. Należy również uwzględnić pakiety wbudowane w obliczenia usługi Databricks, takie jak Python i R. Aby rozpocząć, możesz użyć odpowiedniego obrazu podstawowego:
- W przypadku języka R:
databricksruntime/rbase
- W przypadku języka Python:
databricksruntime/python
- Minimalny obraz utworzony przez usługę Databricks:
databricksruntime/minimal
Możesz również odwołać się do przykładowych plików Dockerfile w usłudze GitHub.
Uwaga
Usługa Databricks zaleca korzystanie z systemu Ubuntu Linux; można jednak użyć systemu Alpine Linux. Aby korzystać z systemu Alpine Linux, należy uwzględnić następujące pliki:
Ponadto należy skonfigurować język Python, jak pokazano w tym przykładzie dockerfile.
Ostrzeżenie
Dokładnie przetestuj niestandardowy obraz kontenera na obliczeniach usługi Azure Databricks. Kontener może działać na komputerze lokalnym lub kompilacji, ale po uruchomieniu kontenera w usłudze Azure Databricks uruchomienie obliczeniowe może zakończyć się niepowodzeniem, niektóre funkcje mogą zostać wyłączone lub kontener może przestać działać, nawet dyskretnie. W najgorszych scenariuszach może to spowodować uszkodzenie danych lub przypadkowe ujawnienie danych stronom zewnętrznym.
Krok 2. Wypychanie obrazu podstawowego
Wypchnij niestandardowy obraz podstawowy do rejestru platformy Docker. Ten proces jest obsługiwany w następujących rejestrach:
- Docker Hub bez uwierzytelniania ani podstawowego uwierzytelniania.
- Usługa Azure Container Registry z podstawowym uwierzytelnianiem.
Oczekuje się również, że inne rejestry platformy Docker, które nie obsługują uwierzytelniania ani podstawowego uwierzytelniania.
Uwaga
Jeśli używasz usługi Docker Hub dla rejestru platformy Docker, upewnij się, że limity szybkości są uwzględniane w oczekiwanej ilości zasobów obliczeniowych w okresie sześciu godzin. Te limity szybkości są różne dla użytkowników anonimowych, uwierzytelnionych użytkowników bez płatnej subskrypcji i płatnych subskrypcji. Aby uzyskać szczegółowe informacje, zobacz dokumentację platformy Docker. Jeśli ten limit zostanie przekroczony, otrzymasz odpowiedź "429 Zbyt wiele żądań".
Krok 3. Uruchamianie obliczeń
Środowisko obliczeniowe można uruchomić przy użyciu interfejsu użytkownika lub interfejsu API.
Uruchamianie obliczeń przy użyciu interfejsu użytkownika
Na stronie Tworzenie zasobów obliczeniowych określ wersję środowiska uruchomieniowego usługi Databricks, która obsługuje usługi Kontener Services usługi Databricks.
W obszarze Opcje zaawansowane wybierz kartę Docker .
Wybierz pozycję Użyj własnego kontenera platformy Docker.
W polu Adres URL obrazu platformy Docker wprowadź niestandardowy obraz platformy Docker.
Przykłady adresów URL obrazów platformy Docker:
Rejestr Format tagu Docker Hub <organization>/<repository>:<tag>
(na przykład:databricksruntime/standard:latest
)Azure Container Registry <your-registry-name>.azurecr.io/<repository-name>:<tag>
Wybierz typ uwierzytelniania. Możesz użyć wpisów tajnych do przechowywania wartości uwierzytelniania nazwy użytkownika i hasła. Zobacz Używanie wpisów tajnych do uwierzytelniania.
Uruchamianie obliczeń przy użyciu interfejsu API
Generowanie tokenu interfejsu API.
Użyj interfejsu wiersza polecenia usługi Databricks, aby uruchomić środowisko obliczeniowe przy użyciu niestandardowej bazy platformy Docker.
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
wymagania zależą od typu obrazu platformy Docker:- W przypadku publicznych obrazów platformy Docker nie dołączaj
basic_auth
pola. - W przypadku prywatnych obrazów platformy Docker należy dołączyć
basic_auth
pole przy użyciu identyfikatora jednostki usługi i hasła jako nazwy użytkownika i hasła. - W przypadku usługi Azure Container Registry należy ustawić
basic_auth
pole na identyfikator i hasło dla jednostki usługi. Aby uzyskać informacje na temat tworzenia jednostki usługi, zobacz dokumentację uwierzytelniania jednostki usługi Azure Container Registry. - Możesz również użyć wpisu tajnego do przechowywania informacji uwierzytelniania. Zobacz Używanie wpisów tajnych do uwierzytelniania.
- W przypadku publicznych obrazów platformy Docker nie dołączaj
Używanie skryptu init
Usługi kontenerów usługi Databricks umożliwiają klientom dołączanie skryptów inicjowania do kontenera platformy Docker. W większości przypadków należy unikać skryptów inicjowania i zamiast tego wprowadzać dostosowania za pośrednictwem platformy Docker bezpośrednio (przy użyciu pliku Dockerfile). Jednak niektóre zadania muszą być wykonywane po uruchomieniu kontenera, a nie podczas kompilowania kontenera. Użyj skryptu inicjowania dla tych zadań.
Załóżmy na przykład, że chcesz uruchomić demona zabezpieczeń wewnątrz niestandardowego kontenera. Zainstaluj i skompiluj demona w obrazie platformy Docker za pomocą potoku tworzenia obrazu. Następnie dodaj skrypt init, który uruchamia demona. W tym przykładzie skrypt inicjowania będzie zawierać wiersz podobny do systemctl start my-daemon
.
W interfejsie API można określić skrypty inicjowania w ramach specyfikacji obliczeniowej w następujący sposób. Aby uzyskać więcej informacji, zobacz Interfejs API klastrów.
"init_scripts": [
{
"file": {
"destination": "file:/my/local/file.sh"
}
}
]
W przypadku obrazów usługi Kontener Services usługi Databricks można również przechowywać skrypty inicjowania w magazynie w chmurze.
Podczas uruchamiania środowiska obliczeniowego korzystającego z usług Kontener Services usługi Databricks należy wykonać następujące czynności:
- Maszyny wirtualne są pozyskiwane od dostawcy usług w chmurze.
- Niestandardowy obraz platformy Docker jest pobierany z repozytorium.
- Usługa Azure Databricks tworzy kontener platformy Docker na podstawie obrazu.
- Kod środowiska Uruchomieniowego usługi Databricks jest kopiowany do kontenera platformy Docker.
- Skrypty inicjowania są wykonywane. Zobacz Co to są skrypty init?.
Usługa Azure Databricks ignoruje platformę Docker CMD
i ENTRYPOINT
elementy pierwotne.
Używanie wpisów tajnych do uwierzytelniania
Usługa Kontenera usługi Databricks obsługuje używanie wpisów tajnych do uwierzytelniania. Podczas tworzenia zasobu obliczeniowego zamiast wprowadzać nazwę użytkownika lub hasło w postaci zwykłego tekstu, wprowadź wpis tajny przy użyciu {{secrets/<scope-name>/<dcs-secret>}}
formatu . Aby uzyskać informacje na temat tworzenia wpisów tajnych, zobacz Zarządzanie wpisami tajnymi.
Włączanie usług kontenerów
Aby korzystać z kontenerów niestandardowych w obliczeniach, administrator obszaru roboczego musi włączyć usługi Kontener Services usługi Databricks.
Administratorzy obszaru roboczego mogą włączyć usługę kontenera usługi Databricks przy użyciu interfejsu wiersza polecenia usługi Databricks. W treści żądania JSON określ enableDcs
wartość true
, jak w poniższym przykładzie:
databricks workspace-conf set-status \
--json '{"enableDcs": "true"}'