147 lines
3.9 KiB
YAML
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"
|