Управление библиотеками с ограниченным доступом к сети в Fabric

Как правило, при добавлении библиотеки Python в виртуальную среду на портале Fabric, вычислительный движок Spark определяет и загружает пакет и его зависимости из PyPI. Однако, если администратор включает защиту исходящего доступа для рабочей области, вычислительные ресурсы Spark заблокированы для исходящих подключений к Интернету. Любая попытка установить пакет через портал завершается ошибкой, так как вычислительные ресурсы не могут достичь PyPI или conda.

Чтобы установить библиотеки Python при включении защиты исходящего доступа, необходимо получить пакеты в Fabric через путь, который не требует исходящего доступа к Интернету из вычислений Spark. В этой статье рассматриваются два подхода:

  • Отправка пользовательских библиотек (рекомендуется) — скачайте нужные файлы колес на отдельном компьютере и отправьте их непосредственно в среду Fabric. Лучше всего, если требуется небольшое количество пакетов и требуется минимальная нагрузка на инфраструктуру.
  • Размещение зеркального отображения PyPI — настройка полной или частичной реплики PyPI в учетной записи хранения Azure за виртуальной сетью вашей организации. Оптимально для организаций, которые полагаются на множество пакетов PyPI и хотят pip install эффективно работать, не управляя отдельными Wheel-файлами. Для этого подхода требуется больше настроек и текущего обслуживания.

Если включена защита исходящего доступа, Fabric не может напрямую установить пакеты PyPI. Этот подход позволяет скачать необходимые пакеты вместе с их зависимостями на отдельном компьютере с доступом к Интернету, а затем передать эти файлы колес в среду Fabric в качестве пользовательских библиотек.

Вы создаете локальную среду Python, соответствующую среде выполнения Fabric, чтобы pip выбрал правильные версии зависимостей. Затем вы используете pip download для получения только дополнительных пакетов, необходимых рабочей нагрузке (а не пакеты, уже включенные в среду выполнения).

Необходимые условия

Прежде чем начать, убедитесь, что у вас есть следующее:

  • Компьютер Linux с доступом к Интернету — вам нужна среда Linux для создания локального окружения Python и скачивания файлов Wheel. Вычислительные ресурсы Fabric Spark выполняются в Linux (Azure Linux или Mariner), поэтому необходимо использовать Linux, чтобы убедиться, что conda разрешает правильные пакеты, зависящие от платформы, и pip download извлекает совместимые колеса. Вы можете использовать любой из следующих вариантов:

  • Файл YML среды выполнения Fabric — скачайте файл YML Python для вашей версии среды выполнения из репозитория Fabric runtime на GitHub:

    • Среда выполнения 1.2 (Spark 3.4): Fabric-Python310-CPU.yml (Python 3.10)
    • Среда выполнения 1.3 (Spark 3.5): Fabric-Python311-CPU.yml (Python 3.11)
    • Среда выполнения 2.0 (Spark 4.0): Fabric-Python313-CPU.yml (Python 3.12)

Снимок экрана: пример файла установки среды выполнения.

Шаг 1. Создание файла требований

Создайте файл с requirements.txt описанием дополнительных пакетов, необходимых рабочей нагрузке, которые еще не включены в среду выполнения Fabric. Рассмотрим пример.

catboost==1.2.8
shap==0.44.0

Вы можете проверить, какие пакеты уже включены в среду выполнения, просмотрев файлы YML в репозитории GitHub среды выполнения Fabric. Только перечислите пакеты, которые отсутствуют или требуют другой версии.

Шаг 2. Удаление частных библиотек из файла YML

Файл YML среды выполнения содержит частные библиотеки Microsoft, которые pip не может разрешить из общедоступных репозиториев. Удалите эти библиотеки из файла перед созданием среды. Определенные библиотеки зависят от версии среды выполнения:

Библиотека Среда выполнения 1.2 Среда выполнения 1.3 Среда выполнения 2.0
azure-synapse-ml-predict Да -- --
azureml-synapse Да Да Да
chat-magics Да Да --
chat-magics-fabric Да Да --
control-script -- Да --
ds-copilot Да Да --
dscopilot-installer Да Да --
fabric-analytics-notebook-plugin -- -- Да
fabric-analytics-sdk -- -- Да
fabric-connection Да Да --
flaml Да Да Да
flt-python -- Да Да
fsspec_wrapper Да Да Да
geoanalytics-fabric -- Да Да
impulse-python-handler Да Да Да
kqlmagiccustom -- Да Да
library-metadata-cooker Да Да Да
notebookutils Да Да Да
prose-pandas2pyspark -- Да Да
prose-suggestions -- Да Да
semantic-link-sempy Да Да Да
spark-mssql-connector-fabric35 -- Да --
spark-mssql-connector-fabric40 -- -- Да
sqlanalyticsconnectorpy Да -- --
sqlanalyticsfabricconnectorpy Да Да Да
synapseml -- -- Да
synapseml-* Да Да Да

Шаг 3. Создание локальной среды Python, которая соответствует среде выполнения Fabric

На компьютере Linux настройте среду conda, которая отражает среду выполнения Fabric. Это гарантирует pip правильное разрешение версий зависимостей для ваших пакетов.

  1. Скачайте и установите Miniconda:

    wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
    bash Miniconda3-latest-Linux-x86_64.sh -b -p $HOME/miniconda3
    export PATH="$HOME/miniconda3/bin:$PATH"
    
  2. Установите компиляторы C/C++, необходимые некоторым пакетам Python во время установки. В Ubuntu/Debian:

    sudo apt-get update
    sudo apt-get -yq install gcc g++
    

    Для других дистрибутивов используйте эквивалентный диспетчер пакетов (например, tdnf в Azure Linux).

  3. Используйте измененный файл YML из предыдущего шага , чтобы создать среду conda. В следующем примере используется файл установки runtime 1.3. Замените имя файла на имя файла YML для вашей версии среды выполнения.

    conda env create -n fabric-env -f Fabric-Python311-CPU.yml
    conda activate fabric-env
    

Шаг 4. Скачивание файлов wheel для ваших пакетов

Используйте pip download для скачивания wheel-файлов для необходимых пакетов и всех их зависимостей в локальный каталог. Эта команда проверяет совместимость версий в рамках среды conda, созданной на предыдущем шаге.

mkdir wheels
pip download -r requirements.txt -d wheels

После завершения wheels команды каталог содержит .whl файлы для каждого пакета и его зависимостей.

Шаг 5. Отправка файлов колесика в среду Fabric

Отправьте скачанные файлы колес в среду Fabric в виде пользовательских библиотек:

  1. На портале Fabric перейдите в рабочую область и откройте среду.
  2. Выберите пользовательские библиотеки на левой панели.
  3. Выберите " Отправить " и выберите .whl файлы из wheels каталога.
  4. Выберите "Опубликовать", чтобы применить изменения.

Размещение зеркального отображения PyPI в службе хранилища Azure

Этот подход настраивает полную или частичную реплику PyPI в учетной записи хранения Azure, доступной из рабочей области Fabric через частную конечную точку. После настройки вычислительная среда Fabric Spark может напрямую разрешать и устанавливать пакеты, так же как обычный pip install, без необходимости исходящего доступа к интернету.

Замечание

Зеркало PyPI лучше всего подходит для организаций, которые полагаются на многие пакеты PyPI и предпочитают pip install работать без управления отдельными wheel-файлами. Этот подход требует дополнительных усилий и постоянного обслуживания, чтобы обеспечить синхронизацию зеркала с PyPI.

Необходимые условия

Прежде чем начать, убедитесь, что у вас есть следующее:

  • Компьютер Linux с доступом к Интернету — используется для запуска средства зеркального отображения и отправки пакетов. Вы можете использовать WSL, компьютер Linux или виртуальную машину Linux Azure.
  • Учетная запись хранения Azure — размещает зеркальные пакеты. Должен быть доступен из рабочей области Fabric через частную конечную точку.
  • Bandersnatch — инструмент для зеркалирования PyPI, который загружает пакеты и генерирует файлы индекса, которые нужны pip.
  • Служебная программа отправки файловAzure CLI, AzCopy или Blobfuse2 для отправки зеркального отображения в учетную запись хранения.

Это важно

Полный репозиторий PyPI большой и постоянно растет (см. статистику PyPI). Начальная синхронизация может занять от 8 до 48 часов в зависимости от скорости сети, оборудования и ввода-вывода диска. Последующие синхронизации загружают только новые или измененные пакеты и гораздо быстрее.

Bandersnatch поддерживает плагины фильтрации, которые позволяют синхронизировать только необходимые пакеты. Например, если зеркальное отображение предназначено только для Fabric, можно исключить двоичные файлы Windows, чтобы сократить время хранения и синхронизации. Оцените эти параметры на основе вашего варианта использования.

Шаг 1. Установка Python и Bandersnatch

На компьютере Linux установите Python (если оно еще недоступно) и Bandersnatch:

# Download and install Miniconda
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh -b -p $HOME/miniconda3
export PATH="$HOME/miniconda3/bin:$PATH"

# Install Bandersnatch
pip install bandersnatch

Шаг 2. Настройка и запуск зеркальной синхронизации

Создайте файл конфигурации Bandersnatch. См. пример конфигурации для справки .

Затем запустите команду mirror. Это выполняет однократную синхронизацию, которая загружает пакеты из PyPI в локальную файловую систему:

bandersnatch --config <path-to-bandersnatch.conf> mirror

После завершения синхронизации зеркальный каталог содержит файлы пакетов и структуру индекса, которые pip требуют:

/home/trusted-service-user/bandersnatch1/web/
├── simple/
├── pypi/
├── packages/
├── local-stats/
└── json/

Шаг 3. Проверка локального зеркала (необязательно)

Зеркальное отображение можно проверить, запуская локальный HTTP-сервер и устанавливая из него пакет:

cd <path-to-mirror-directory>
python -m http.server 8000

# In a separate terminal, test installing a package from the local mirror
pip install <package-name> --index-url http://localhost:8000/simple

Шаг 4. Отправка зеркального отображения в службу хранилища Azure

Включите размещение статических веб-сайтов в учетной записи хранения Azure. Это позволяет размещать страницы индекса PyPI, необходимые pip для разрешения пакетов. Включение этой функции автоматически создает $web контейнер.

Снимок экрана: учетная запись хранения с включенным статическим веб-сайтом.

С помощью Azure CLI, AzCopy или Blobfuse2 отправьте все пять папок (простые, pypi, пакеты, локальные статистики и json) в контейнер $web . Все папки должны находиться в одном контейнере, так как страницы индекса в simple/ используют относительные ссылки для обращения к файлам в packages/.

Шаг 5. Подключение Ткани к зеркалу

Чтобы компонент Spark в Fabric мог получить доступ к вашей учетной записи хранения, добавьте две управляемые частные конечные точки в параметры рабочей области Fabric — одну для конечной точки blob-объекта и одну для конечной точки веб-сайта (статического) вашей учетной записи хранения.

Снимок экрана: конфигурация управляемых частных конечных точек.

Затем установите пакеты из зеркала, используя URL статического веб-сайта вашей учетной записи. Чтобы найти этот URL-адрес, перейдите к учетной записи хранения на портале Azure и выберите статический веб-сайт в разделе "Управление данными". URL-адрес выглядит следующим образом https://<storage-account-name>.z<number>.web.core.windows.net: номер зоны зависит от региона.

Вы можете указать pip на это зеркало с помощью файла YAML среды или встроенной команды %pip, выполняемой в записной книжке.

  • YAML-файл в среде:

    dependencies:
      - pip
      - pip:
        - --index-url https://<static-website-url>/simple
        - pytest==8.2.2
    
  • Встроенная команда в ноутбуке:

    %pip install pytest --index-url https://<static-website-url>/simple