Files
2026-04-24 21:32:01 -06:00

147 lines
3.9 KiB
YAML

---
# llama.cpp installation and build
- name: Check if running on WSL
ansible.builtin.command: grep -qi microsoft /proc/version
register: wsl_check
changed_when: false
failed_when: false
- name: Set WSL fact
ansible.builtin.set_fact:
is_wsl: "{{ wsl_check.rc == 0 }}"
- name: Detect GPU on Linux/WSL
ansible.builtin.command: nvidia-smi
register: nvidia_smi_output
changed_when: false
failed_when: false
when: ansible_os_family == "Debian" or is_wsl | default(false)
- name: Set GPU type for WSL/Linux
ansible.builtin.set_fact:
gpu_type: "{{ 'nvidia' if nvidia_smi_output.rc == 0 else 'none' }}"
when: is_wsl | default(false) or ansible_os_family == "Debian"
- name: Display detected GPU type
ansible.builtin.debug:
msg: "llama.cpp GPU type: {{ gpu_type | default('none') }}"
- name: Check if llama.cpp already exists
ansible.builtin.stat:
path: "{{ llmlab_base }}/lab2/llama.cpp"
register: llama_cpp_stat
- name: Check existing build config
ansible.builtin.command:
cmd: grep -q "^GGML_CUDA:BOOL=ON" "{{ llmlab_base }}/lab2/llama.cpp/build/CMakeCache.txt" 2>/dev/null && echo "cuda" || echo "none"
register: existing_gpu_check
changed_when: false
failed_when: false
when: llama_cpp_stat.stat.exists
- name: Determine if rebuild needed
ansible.builtin.set_fact:
needs_rebuild: >-
{{
not llama_cpp_stat.stat.exists or
(gpu_type == 'nvidia' and existing_gpu_check.stdout != 'cuda') or
(gpu_type == 'amd' and existing_gpu_check.stdout != 'amd')
}}
- name: Clean build directory for rebuild
ansible.builtin.file:
path: "{{ llmlab_base }}/lab2/llama.cpp/build"
state: absent
become: no
when: needs_rebuild | default(false)
- name: Clone llama.cpp repository
ansible.builtin.git:
repo: https://github.com/ggerganov/llama.cpp
dest: "{{ llmlab_base }}/lab2/llama.cpp"
version: master
update: no
become: no
when: not llama_cpp_stat.stat.exists
- name: Create build directory
ansible.builtin.file:
path: "{{ llmlab_base }}/lab2/llama.cpp/build"
state: directory
mode: '0755'
become: no
- name: Configure llama.cpp only if not already configured
ansible.builtin.command:
cmd: test -f CMakeCache.txt
args:
chdir: "{{ llmlab_base }}/lab2/llama.cpp/build"
register: cmake_configured
changed_when: false
failed_when: false
- name: Configure llama.cpp with CUDA (NVIDIA GPU)
ansible.builtin.command:
argv:
- cmake
- ..
- -G Ninja
- -DCMAKE_BUILD_TYPE=Release
- -DGGML_CUDA=on
args:
chdir: "{{ llmlab_base }}/lab2/llama.cpp/build"
when: gpu_type == 'nvidia' and cmake_configured.rc != 0
become: no
- name: Configure llama.cpp for AMD (ROCm)
ansible.builtin.command:
argv:
- cmake
- ..
- -G Ninja
- -DCMAKE_BUILD_TYPE=Release
- -DGGML_ROCM=on
args:
chdir: "{{ llmlab_base }}/lab2/llama.cpp/build"
when: gpu_type == 'amd' and cmake_configured.rc != 0
become: no
- name: Configure llama.cpp for CPU only
ansible.builtin.command:
argv:
- cmake
- ..
- -G Ninja
- -DCMAKE_BUILD_TYPE=Release
args:
chdir: "{{ llmlab_base }}/lab2/llama.cpp/build"
when: gpu_type | default('none') == 'none' and cmake_configured.rc != 0
become: no
- name: Build llama.cpp
ansible.builtin.command:
argv:
- ninja
args:
chdir: "{{ llmlab_base }}/lab2/llama.cpp/build"
become: no
register: build_output
- name: Display build output
ansible.builtin.debug:
msg: "{{ build_output.stdout_lines[-10:] }}"
when: build_output.stdout_lines is defined
- name: Add llama.cpp to user PATH
ansible.builtin.lineinfile:
path: "{{ llmlab_base }}/.bashrc"
line: 'export PATH="$HOME/lab2/llama.cpp/build/bin:$PATH"'
state: present
insertafter: EOF
notify: Shell updated
- name: Display llama.cpp installation
ansible.builtin.debug:
msg: "llama.cpp installed to {{ llmlab_base }}/lab2/llama.cpp"