Ein Pod je GPU-VM (Embed+Rerank bzw. Chat), Host-Netz mit den Ports aus dem Compose, P2000 fest per UUID (NVIDIA_VISIBLE_DEVICES). Das Device Plugin vergibt nur noch Index 0 (M4000). Rolle gpu-llamacpp: gemeinsame Vorbereitung (prepare.yml), k3s.yml mit Image-Import und Compose-Stopp; gpu-llamacpp.yml bricht ohne -e llamacpp_compose=true ab. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
24f4066aaf
commit
986f1116fe
@@ -0,0 +1,74 @@
|
||||
# llama.cpp in k3s statt Compose (Task 6.1, D6). Aufruf über playbooks/gpu-llamacpp-k3s.yml (je VM nacheinander).
|
||||
# Rückweg je VM: kubectl -n knaster delete deploy llamacpp-<vm>, dann in der VM
|
||||
# docker compose --project-directory /opt/knaster/gpu-llamacpp start
|
||||
- name: Profile, Karten, Modelle
|
||||
ansible.builtin.include_tasks: prepare.yml
|
||||
|
||||
# 1. Image aus Docker in das containerd von k3s übernehmen (kein Neubau, kein Registry-Umweg)
|
||||
- name: Image in k3s vorhanden?
|
||||
ansible.builtin.command: /usr/local/bin/k3s ctr images ls -q
|
||||
register: llamacpp_k3s_images
|
||||
changed_when: false
|
||||
|
||||
- name: Image aus Docker importieren
|
||||
ansible.builtin.shell: set -o pipefail; docker save {{ llamacpp_image }} | /usr/local/bin/k3s ctr images import -
|
||||
args:
|
||||
executable: /bin/bash
|
||||
when: ("docker.io/" ~ llamacpp_image) not in llamacpp_k3s_images.stdout
|
||||
async: 1800
|
||||
poll: 15
|
||||
|
||||
# 2. Compose-Stack anhalten (Host-Ports und VRAM werden frei), Dateien bleiben für den Rückweg
|
||||
- name: Compose-Projekt vorhanden?
|
||||
ansible.builtin.stat:
|
||||
path: "{{ llamacpp_dir }}/docker-compose.yml"
|
||||
register: llamacpp_compose_file
|
||||
|
||||
- name: Compose-Stack anhalten
|
||||
community.docker.docker_compose_v2:
|
||||
project_src: "{{ llamacpp_dir }}"
|
||||
state: stopped
|
||||
when: llamacpp_compose_file.stat.exists
|
||||
|
||||
# 3. Manifest je VM rendern (UUID der P2000) und anwenden
|
||||
- name: Namespace knaster
|
||||
ansible.builtin.command: kubectl apply -f {{ llamacpp_k3s_namespace }}
|
||||
register: llamacpp_ns
|
||||
changed_when: "'created' in llamacpp_ns.stdout"
|
||||
delegate_to: localhost
|
||||
become: false
|
||||
|
||||
- name: Deployment anwenden
|
||||
ansible.builtin.command:
|
||||
cmd: kubectl apply -f -
|
||||
stdin: "{{ lookup('template', llamacpp_k3s_template) }}"
|
||||
vars:
|
||||
llamacpp_k3s_containers: "{{ llamacpp_profiles | map('extract', llamacpp_k3s_services) | flatten }}"
|
||||
register: llamacpp_apply
|
||||
changed_when: "'configured' in llamacpp_apply.stdout or 'created' in llamacpp_apply.stdout"
|
||||
delegate_to: localhost
|
||||
become: false
|
||||
|
||||
- name: Warten, bis der Pod bereit ist
|
||||
ansible.builtin.command: kubectl -n knaster rollout status deployment/llamacpp-{{ inventory_hostname }} --timeout=600s
|
||||
changed_when: false
|
||||
delegate_to: localhost
|
||||
become: false
|
||||
|
||||
# 4. Prüfen in der VM: Dienste gesund, Prozesse nur auf der P2000
|
||||
- name: Gesundheit in der VM prüfen
|
||||
ansible.builtin.uri:
|
||||
url: "http://127.0.0.1:{{ item.port }}/health"
|
||||
status_code: 200
|
||||
loop: "{{ llamacpp_profiles | map('extract', llamacpp_k3s_services) | flatten }}"
|
||||
loop_control:
|
||||
label: "{{ item.name }}:{{ item.port }}"
|
||||
|
||||
- name: Belegung der Karten
|
||||
ansible.builtin.command: nvidia-smi --query-gpu=index,name,memory.used,memory.total --format=csv,noheader
|
||||
register: llamacpp_vram
|
||||
changed_when: false
|
||||
|
||||
- name: Ergebnis
|
||||
ansible.builtin.debug:
|
||||
msg: "{{ llamacpp_vram.stdout_lines }}"
|
||||
Reference in New Issue
Block a user