Настройки SM-ML
Общая информация
В данной статье приведена инструкция по установке и настройке сервиса SM-ML (sm-ml-service), подключению сервиса к Smart Monitor и подготовке сред выполнения Docker и Kubernetes.
SM-ML является серверной частью ML-Студии. Сервис принимает запросы на обучение и применение моделей, а также разворачивает вычислительные контейнеры в Docker или Kubernetes. Сервис устанавливается отдельно на выделенном сервере.
Перед установкой подготовьте сервер в соответствии с выбранной средой выполнения:
- Docker — выделенный сервер с установленным Docker. Для выполнения вычислений на GPU установите GPU и настройте доступ к нему из контейнеров
- Kubernetes — сервер Linux с доступом к API кластера. Вычисления будут выполняться на узлах кластера
В состав поставки входят следующие файлы:
sm-ml-service— исполняемый файл сервиса (Linux)sm-ml-runtime-6.1.0-amd64.tar— архив образа среды выполнения (amd64)
В примерах используется версия релиза 6.1.0. При выполнении команд укажите версию, соответствующую используемой поставке.
Установка сервиса (Linux, systemd)
Чтобы установить sm-ml-service как службу systemd, выполните следующие команды на сервере:
# 1. Создать системного пользователя в группе docker (выполняется один раз)
sudo useradd -r -s /sbin/nologin -G docker smml
# 2. Установить сервис как службу systemd sm-ml.service
sudo ./sm-ml-service install --user smml \
--docker-sock /var/run/docker.sock --enable
# 3. Запустить службу и проверить работоспособность
sudo systemctl start sm-ml.service
curl http://localhost:18089/health
Для просмотра полного списка параметров установки выполните следующую команду:
./sm-ml-service install --help
По умолчанию сервис использует текущий каталог в качестве рабочего. Данные сохраняются в подкаталоге data/.
Конфигурационный файл
Параметры сервиса можно задать в конфигурационном файле формата YAML. Если конфигурационный файл отсутствует, сервис использует значения по умолчанию.
По умолчанию сервис загружает файл config.yaml, расположенный рядом с исполняемым файлом. Чтобы указать другой путь, используйте параметр --config <путь> или переменную окружения SM_ML_CONFIG.
Для создания конфигурационного файла перейдите в каталог с исполняемым файлом сервиса и создайте файл config.yaml:
cat > config.yaml <<'EOF'
server:
port: 18089
ssl:
enabled: false # включить HTTPS
certificate: "" # путь к сертификату (PEM)
certificate-private-key: "" # путь к приватному ключу (PEM)
logging:
file:
path: logs # каталог для файла логов
smartmonitor:
url: "" # адрес Smart Monitor
insecure-skip-verify: false # не проверять TLS-сертификат Smart Monitor
ca-cert-path: "" # доверенный CA-сертификат (PEM)
EOF
В конфигурационном файле доступны следующие параметры:
| Параметр | Назначение | По умолчанию |
|---|---|---|
server.port | Порт входящих соединений | 18089 |
server.ssl.enabled | Включить HTTPS | false |
server.ssl.certificate | Путь к сертификату (PEM) | — |
server.ssl.certificate-private-key | Путь к приватному ключу (PEM) | — |
logging.file.path | Каталог для файлов логов: sm-ml-service.log (общий) и request-headers.log (запросы и их заголовки) | logs |
smartmonitor.url | Адрес сервера Smart Monitor | — |
smartmonitor.insecure-skip-verify | Не проверять TLS-сертификат Smart Monitor | false |
smartmonitor.ca-cert-path | Путь к доверенному CA-сертификату (PEM) | — |
Если параметр server.ssl.enabled имеет значение true, сервис принимает соединения по HTTPS. Если сертификат и приватный ключ не указаны, при запуске сервис создает самоподписанный сертификат в памяти.
Для проверки работоспособности сервиса с самоподписанным сертификатом выполните следующую команду:
curl -k https://localhost:18089/health
Выпуск сертификата сервиса
Для настройки HTTPS рекомендуется выпустить сертификат сервиса и подписать его сертификатом собственного удостоверяющего центра (CA) (обычно файлы ca-cert.pem и ca-key.pem).
Сертификат CA (ca-cert.pem) необходимо один раз добавить в доверенное хранилище. После этого серверный сертификат можно перевыпускать без обновления доверенного хранилища.
В примерах используется имя узла sm-ml.example.com и порт 30000. При выполнении команд замените их значениями, соответствующими используемому окружению.
1. Создание приватного ключа и CSR
На узле сервиса создайте приватный ключ и запрос на подписание сертификата (CSR):
openssl ecparam -genkey -name prime256v1 -out server.key
chmod 600 server.key
openssl req -new -key server.key -out server.csr -subj "/CN=sm-ml.example.com"
Файл server.key содержит приватный ключ и должен храниться только на узле сервиса.
2. Настройка Subject Alternative Name
Создайте файл расширений сертификата и укажите в поле Subject Alternative Name имя узла, по которому клиент будет обращаться к сервису:
cat > server.ext <<'EOF'
subjectAltName = DNS:sm-ml.example.com
extendedKeyUsage = serverAuth
EOF
Java проверяет имя узла по значению subjectAltName. Значение поля Common Name при этой проверке не учитывается.
3. Подписание CSR
Подпишите CSR с помощью сертификата и приватного ключа CA:
openssl x509 -req -in server.csr \
-CA ca-cert.pem -CAkey ca-key.pem -CAcreateserial \
-days 825 -out server.crt \
-extfile server.ext
Если файл ca-key.pem защищен паролем, OpenSSL запросит пароль во время выполнения команды. В примере сертификат выпускается на 825 дней — это максимальный срок, принимаемый современными клиентами.
Чтобы проверить выпущенный сертификат, выполните следующую команду:
openssl verify -CAfile ca-cert.pem server.crt
4. Настройка HTTPS
В файле config.yaml включите HTTPS и укажите пути к сертификату и приватному ключу:
server:
port: 30000
ssl:
enabled: true
certificate: "server.crt"
certificate-private-key: "server.key"
Чтобы применить изменения, перезапустите службу и проверьте доступность сервиса по HTTPS:
sudo systemctl restart sm-ml.service
curl --cacert ca-cert.pem https://sm-ml.example.com:30000/health
5. Настройка доверенного хранилища Java
На узле клиента импортируйте сертификат CA в доверенное хранилище Java:
keytool -importcert -alias example-ca \
-file ca-cert.pem \
-keystore truststore.jks \
-storepass changeit -noprompt
В доверенное хранилище необходимо импортировать сертификат CA, а не серверный сертификат.
Для запуска Java-клиента с созданным доверенным хранилищем укажите следующие параметры:
-Djavax.net.ssl.trustStore=/путь/к/truststore.jks
-Djavax.net.ssl.trustStorePassword=changeit
Чтобы сертификату CA доверяли все Java-приложения узла, импортируйте его в общее хранилище JDK cacerts вместо отдельного доверенного хранилища:
keytool -importcert -alias example-ca \
-file ca-cert.pem \
-keystore "$JAVA_HOME/lib/security/cacerts" \
-storepass changeit -noprompt
В примерах используется стандартный пароль хранилища cacerts — changeit.
Клиент должен обращаться к сервису по имени, указанному в subjectAltName (https://sm-ml.example.com:30000). Обращение по IP-адресу приведет к ошибке проверки, если этот адрес не был добавлен в subjectAltName при выпуске сертификата (например, subjectAltName = DNS:sm-ml.example.com, IP:10.0.0.5).
Проверка доступа к API
Чтобы включить проверку доступа к API через Smart Monitor, укажите адрес Smart Monitor в параметре smartmonitor.url.
При получении входящего запроса сервис передает его заголовки в запросе GET <smartmonitor.url>/_core/system/access. Smart Monitor проверяет права пользователя и возвращает результат:
- при коде состояния 2xx доступ разрешается
- при другом коде состояния запрос отклоняется
- если Smart Monitor недоступен, доступ запрещается
Запросы /health и OPTIONS выполняются без проверки. Чтобы полностью отключить проверку доступа, оставьте значение smartmonitor.url пустым.
Если Smart Monitor использует сертификат собственного удостоверяющего центра, укажите путь к сертификату CA в параметре smartmonitor.ca-cert-path.
Параметр smartmonitor.insecure-skip-verify: true отключает проверку TLS-сертификата Smart Monitor. Использование этого параметра снижает безопасность соединения.
После изменения конфигурации перезапустите службу:
sudo systemctl restart sm-ml.service
Настройка Smart Monitor
Для подключения Smart Monitor к sm-ml-service необходимо задать кластерные настройки и сохранить пароль пользователя. Все запросы в данном разделе выполняются в Консоль разработчика (Навигационное меню- Параметры системы - Консоль разработчика).
1. Настройка подключения к сервису
Задайте адрес, порт и параметры подключения к сервису:
PUT _cluster/settings
{
"persistent": {
"sme.ml.service_url": "https://sm-ml.example.com/",
"sme.ml.service_port": 30000,
"sme.ml.timeout": 300000,
"sme.ml.enabled": true,
"sme.ml.user": "sm_ml_user"
}
}
| Настройка | Назначение |
|---|---|
sme.ml.service_url | Адрес сервиса (по имени из subjectAltName сертификата) |
sme.ml.service_port | Порт сервиса |
sme.ml.timeout | Таймаут обращения к сервису, мс |
sme.ml.enabled | Включить интеграцию с сервисом |
sme.ml.user | Имя пользователя, от которого выполняются запросы |
2. Сохранение пароля пользователя
Сохраните пароль пользователя, указанного в параметре sme.ml.user, в keystore Smart Monitor:
POST /_core/keystore/sm.core.ml.password
{
"value": "<пароль>"
}
После применения настроек SML-команды train и predict будут выполняться через sm-ml-service. Пример использования приведен в разделе Пошаговое руководство ML-Студии.
Среда выполнения Docker: загрузка образа
Образ среды выполнения необходимо загрузить в Docker на узле, где будут запускаться вычислительные контейнеры.
Для загрузки образа выполните следующую команду:
docker load -i sm-ml-runtime-6.1.0-amd64.tar
Чтобы убедиться, что образ загружен, выполните следующую команду:
docker images sm-ml-runtime
Среда выполнения Kubernetes
Для подключения среды Kubernetes необходимо подготовить файл kubeconfig целевого кластера. Файл должен быть доступен на хосте, где установлен sm-ml-service.
1. Подключение к кластеру
На хосте с sm-ml-service установите kubectl. Затем поместите файл kubeconfig кластера в ~/.kube/config или укажите путь к нему в переменной окружения KUBECONFIG.
Обычно файл kubeconfig копируют с узла control plane кластера:
mkdir -p ~/.kube
scp <control-plane-узел>:/etc/kubernetes/admin.conf ~/.kube/config
Чтобы проверить подключение к кластеру, выполните следующие команды:
kubectl cluster-info
kubectl get nodes
2. Экспорт конфигурации
Экспортируйте активную конфигурацию kubeconfig со встроенными сертификатами в отдельный файл:
kubectl config view --raw --minify > kubeconfig.yaml
В данной команде используются следующие параметры:
--raw— сохраняет сертификаты и ключи в конфигурации--minify— сохраняет только текущий контекст
3. Создание среды
Перейдите в Навигационное меню - Параметры системы - Настройки модулей - ML СТУДИЯ - Среды машинного обучения и нажмите Создать.
В поле Вид подключения выберите kubernetes, затем заполните следующие поля:
Kubeconfig YAML— содержимое файлаkubeconfig.yamlNode URL— внешний адрес узла или ingress, напримерhttp://<node-host>. На основе этого адреса формируются ссылки на сервисы развертывания (API, Jupyter)
Нажмите Сохранить. Созданная среда появится в поле Среда формы Создать deployment.
Для создания среды через API сервиса выполните следующий запрос:
curl -X POST http://localhost:18089/__ui/environments \
-H 'Content-Type: application/json' \
-d '{
"name": "<имя среды>",
"connector": "kubernetes",
"kubeconfig": "<полный kubeconfig YAML>",
"node_port_url": "http://<node-host>"
}'