unip-controller/controller/templates/ml-component/ml-component-deployment.yaml

138 lines
4.8 KiB
YAML
Raw Permalink Normal View History

2025-01-29 13:13:51 +00:00
# ============================================================
# Система: Единая библиотека, Центр ИИ НИУ ВШЭ
# Модуль: MLComponent
# Авторы: Полежаев В.А., Хританков А.С.
# Дата создания: 2024 г.
# ============================================================
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ deployment_name }}
namespace: {{ namespace }}
spec:
replicas: 1
selector:
matchLabels:
app: ml-cmp-{{ name }}
template:
metadata:
labels:
app: ml-cmp-{{ name }}
spec:
containers:
- name: ml-cmp-{{ name }}
image: {{ image_name }}
imagePullPolicy: Always
command: ["/bin/bash"]
args:
- -c
- >-
{% if python_package_version %}
pip3 install "unip-mlcmp {{ python_package_version }}"
{% else %}
pip3 install unip-mlcmp
{% endif %}
{% if python_package_registry_credentials %}
--extra-index-url {{ python_package_registry_credentials }}
--trusted-host {{ python_package_registry_host }}
{% endif %}
&&
{% if file_exchange_copy %}
mkdir -p $(FILES_S3_COPY_INFERENCE_FILES_DIR) &&
{% endif %}
export PYTHONPATH=$PYTHONPATH:$(PYTHONPATH_EXTENSION) &&
export PATH=/home/user/.local/bin:$PATH &&
{% if download_model %}
python3 -m unip.mlcmp.download_model_s3 &&
{% endif %}
hypercorn $(MLCMP_PACKAGE_APP_NAME) -k trio -b 0.0.0.0:{{ container_port }}
{% if env %}
env:
{% for env_var in env %}
- name: {{ env_var['name'] }}
value: "{{ env_var['value'] }}"
{% endfor %}
{% endif %}
{% if env_from %}
envFrom:
{% for env_from_elem in env_from %}
- {{ env_from_elem['key'] }}:
{{ env_from_elem['body'] }}
{% endfor %}
{% endif %}
ports:
- containerPort: {{ container_port }}
{% if volume_mounts %}
volumeMounts:
{% for volume_mount in volume_mounts %}
- name: {{ volume_mount['volume_name'] }}
mountPath: {{ volume_mount['mount_path'] }}
{% if volume_mount['sub_path'] %}
subPath: {{ volume_mount['sub_path'] }}
{% endif %}
{% endfor %}
{% endif %}
{% if resource_limits or resource_requests %}
resources:
{% if resource_limits %}
limits:
{% if resource_limits.memory %}
memory: {{ resource_limits.memory }}
{% endif %}
{% if resource_limits.cpu %}
cpu: {{ resource_limits.cpu }}
{% endif %}
{% if resource_limits.gpu %}
nvidia.com/gpu: {{ resource_limits.gpu }}
{% endif %}
{% endif %}
{% if resource_requests %}
requests:
{% if resource_requests.memory is not none %}
memory: {{ resource_requests.memory }}
{% endif %}
{% if resource_requests.cpu is not none %}
cpu: {{ resource_requests.cpu }}
{% endif %}
{% if resource_requests.gpu %}
nvidia.com/gpu: {{ resource_requests.gpu }}
{% endif %}
{% endif %}
{% endif %}
{% if volumes %}
volumes:
{% for volume in volumes %}
- name: {{ volume['volume_name'] }}
persistentVolumeClaim:
claimName: {{ volume['pvc_name'] }}
{% endfor %}
{% endif %}
{% if image_registry_credentials_secret_name %}
imagePullSecrets:
- name: {{ image_registry_credentials_secret_name }}
{% endif %}
{% if tolerations %}
tolerations:
{% for tol in tolerations %}
- key: "{{ tol.key }}"
operator: "{{ tol.operator }}"
value: "{{ tol.value }}"
effect: "{{ tol.effect }}"
{% endfor %}
{% endif %}
{% if node_affinity %}
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
{% for e in node_affinity.expressions %}
- key: {{ e.key }}
operator: {{ e.operator }}
values:
{% for v in e.vals %}
- "{{ v }}"
{% endfor %}
{% endfor %}
{% endif %}