# Gemeinsam für Compose (main.yml) und k3s (k3s.yml): Profile prüfen, P2000 per Name finden, Modelle laden. - name: Profile prüfen ansible.builtin.assert: that: - llamacpp_profiles | length > 0 - llamacpp_profiles | difference(llamacpp_services.keys() | list) | length == 0 fail_msg: "llamacpp_profiles muss aus {{ llamacpp_services.keys() | list }} bestehen (Inventar, Gruppe gpu_llamacpp)" # --- Kartenwahl: UUID statt Index, geprüft über den Kartennamen --- - name: Karten in der VM lesen ansible.builtin.command: nvidia-smi --query-gpu=index,uuid,name --format=csv,noheader register: llamacpp_smi changed_when: false - name: UUID je Dienst aus dem Kartennamen bestimmen ansible.builtin.set_fact: llamacpp_gpu_env: >- {{ llamacpp_gpu_env | default({}) | combine({item.key: (llamacpp_smi.stdout_lines | map('split', ', ') | selectattr(2, 'equalto', item.value) | map(attribute=1) | first | default(''))}) }} loop: "{{ llamacpp_cards | dict2items }}" - name: Jede gewünschte Karte ist vorhanden ansible.builtin.assert: that: llamacpp_gpu_env[item.key] is match('GPU-') fail_msg: "{{ item.value }} für {{ item.key }} nicht gefunden: {{ llamacpp_smi.stdout_lines }}" loop: "{{ llamacpp_cards | dict2items }}" # --- Modelle --- - name: Modelle laden (Prüfsumme gegen Hugging Face) ansible.builtin.get_url: url: "{{ item.url }}" dest: "{{ llamacpp_models_dir }}/{{ item.dest }}" checksum: "{{ item.checksum }}" mode: "0644" timeout: 120 loop: "{{ llamacpp_profiles | map('extract', llamacpp_models) | flatten }}" loop_control: label: "{{ item.dest }}"