107 lines
3.2 KiB
YAML
107 lines
3.2 KiB
YAML
- name: Clone llama.cpp
|
|
git:
|
|
repo: "https://github.com/ggml-org/llama.cpp.git"
|
|
dest: "{{ courseware_repos_dir }}/llama.cpp"
|
|
version: "{{ courseware_llama_cpp_commit }}"
|
|
update: false
|
|
|
|
- name: Check for CUDA compiler on Linux
|
|
command: which nvcc
|
|
register: courseware_llama_nvcc
|
|
changed_when: false
|
|
failed_when: false
|
|
when: ansible_system == "Linux"
|
|
|
|
- name: Check for CUDA runtime header on Linux
|
|
stat:
|
|
path: "{{ item }}"
|
|
loop:
|
|
- /usr/local/cuda/include/cuda_runtime.h
|
|
- /usr/include/cuda_runtime.h
|
|
register: courseware_llama_cuda_headers
|
|
when: ansible_system == "Linux"
|
|
|
|
- name: Fail early when CUDA toolkit is missing on Linux/WSL
|
|
fail:
|
|
msg: |
|
|
CUDA Toolkit is not installed inside this Linux environment.
|
|
|
|
`nvidia-smi` only proves that the NVIDIA driver is visible. It does not provide the Linux-side CUDA development toolkit needed to build CUDA-enabled llama.cpp.
|
|
|
|
If you are using WSL, this is the common split:
|
|
- Windows side: NVIDIA driver exposes the GPU to WSL
|
|
- Linux side: CUDA toolkit still must exist inside the distro
|
|
|
|
Fix it, then rerun:
|
|
bash deploy-courseware.sh
|
|
|
|
First try:
|
|
sudo apt update
|
|
sudo apt install -y nvidia-cuda-toolkit
|
|
|
|
If that package is unavailable in your distro:
|
|
1. add NVIDIA's CUDA apt repository for your Debian/Ubuntu release
|
|
2. install the CUDA toolkit from that repository
|
|
|
|
Verify with:
|
|
nvcc --version
|
|
ls /usr/local/cuda/include/cuda_runtime.h
|
|
when:
|
|
- ansible_system == "Linux"
|
|
- courseware_llama_nvcc.rc != 0 or (courseware_llama_cuda_headers.results | selectattr('stat.exists', 'equalto', true) | list | length == 0)
|
|
|
|
- name: Set llama.cpp backend flag
|
|
set_fact:
|
|
courseware_llama_backend_flag: "{{ '-DGGML_METAL=ON' if ansible_system == 'Darwin' else '-DGGML_CUDA=ON' }}"
|
|
|
|
- name: Configure llama.cpp
|
|
command:
|
|
argv:
|
|
- cmake
|
|
- -S
|
|
- "{{ courseware_repos_dir }}/llama.cpp"
|
|
- -B
|
|
- "{{ courseware_repos_dir }}/llama.cpp/build"
|
|
- -DCMAKE_BUILD_TYPE=Release
|
|
- "{{ courseware_llama_backend_flag }}"
|
|
args:
|
|
creates: "{{ courseware_repos_dir }}/llama.cpp/build/CMakeCache.txt"
|
|
|
|
- name: Build llama.cpp tools
|
|
command:
|
|
argv:
|
|
- cmake
|
|
- --build
|
|
- "{{ courseware_repos_dir }}/llama.cpp/build"
|
|
- --target
|
|
- llama-cli
|
|
- llama-quantize
|
|
- llama-perplexity
|
|
- llama-server
|
|
- -j
|
|
|
|
- name: Check system PATH slots for llama.cpp tools
|
|
stat:
|
|
path: "/usr/local/bin/{{ item }}"
|
|
follow: false
|
|
loop:
|
|
- llama-cli
|
|
- llama-quantize
|
|
- llama-perplexity
|
|
- llama-server
|
|
register: courseware_llama_path_slots
|
|
when: ansible_system == "Linux"
|
|
|
|
- name: Link llama.cpp tools into /usr/local/bin
|
|
become: true
|
|
file:
|
|
src: "{{ courseware_llama_cpp_bin_dir }}/{{ item.item }}"
|
|
dest: "/usr/local/bin/{{ item.item }}"
|
|
state: link
|
|
force: true
|
|
loop: "{{ courseware_llama_path_slots.results | default([]) }}"
|
|
when:
|
|
- ansible_system == "Linux"
|
|
- not item.stat.exists or item.stat.islnk
|
|
- not item.stat.exists or item.stat.lnk_source == (courseware_llama_cpp_bin_dir ~ '/' ~ item.item)
|