Перейти к основному содержимому
Версия: 6.1

Настройки 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Включить HTTPSfalse
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 Monitorfalse
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

В примерах используется стандартный пароль хранилища cacertschangeit.

Обратите внимание!

Клиент должен обращаться к сервису по имени, указанному в 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.yaml
  • Node 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>"
}'