Provision Netron and Lab 1 local assets
This commit is contained in:
+14
-29
@@ -9,15 +9,15 @@ courseware_datasets_dir: "{{ courseware_state_dir }}/datasets"
|
||||
courseware_tools_dir: "{{ courseware_state_dir }}/tools"
|
||||
courseware_apps_dir: "{{ courseware_state_dir }}/apps"
|
||||
courseware_downloads_dir: "{{ courseware_state_dir }}/downloads"
|
||||
courseware_lab1_dir: "{{ courseware_state_dir }}/lab1"
|
||||
courseware_lab2_dir: "{{ courseware_state_dir }}/lab2"
|
||||
courseware_lab6_dir: "{{ courseware_state_dir }}/lab6"
|
||||
courseware_transformerlab_legacy_home: "{{ courseware_state_dir }}/transformerlab-home"
|
||||
courseware_safe_homes_dir: "{{ lookup('env', 'HOME') }}/.local/share/local-lab-deployment"
|
||||
courseware_transformerlab_home: "{{ (courseware_safe_homes_dir ~ '/transformerlab-home') if ' ' in courseware_root else courseware_transformerlab_legacy_home }}"
|
||||
courseware_unsloth_home: "{{ courseware_state_dir }}/unsloth-home"
|
||||
courseware_lab1_models_dir: "{{ courseware_models_dir }}/lab1"
|
||||
courseware_ollama_models_dir: "{{ courseware_models_dir }}/ollama"
|
||||
courseware_node_runtime_dir: "{{ courseware_tools_dir }}/node-runtime"
|
||||
courseware_node_runtime_bin_dir: "{{ courseware_node_runtime_dir }}/node_modules/node/bin"
|
||||
courseware_netron_venv_dir: "{{ courseware_venvs_dir }}/netron"
|
||||
courseware_wetty_dir: "{{ courseware_tools_dir }}/wetty"
|
||||
courseware_promptfoo_dir: "{{ courseware_lab6_dir }}"
|
||||
courseware_wiki_repo_dir: "{{ courseware_repos_dir }}/LLM-Labs"
|
||||
@@ -29,7 +29,7 @@ courseware_url_host: "127.0.0.1"
|
||||
courseware_ports:
|
||||
ollama: 11434
|
||||
open_webui: 8080
|
||||
transformerlab: 8338
|
||||
netron: 8338
|
||||
chunkviz: 3001
|
||||
embedding_atlas: 5055
|
||||
unsloth: 8888
|
||||
@@ -37,30 +37,8 @@ courseware_ports:
|
||||
wiki: 80
|
||||
wetty: 7681
|
||||
|
||||
courseware_transformerlab_install_mode: "single-user-pinned"
|
||||
courseware_transformerlab_version: "v0.28.2"
|
||||
courseware_transformerlab_version_dir: "{{ courseware_transformerlab_version | regex_replace('^v', '') }}"
|
||||
courseware_transformerlab_source_archive: "{{ courseware_downloads_dir }}/transformerlab-app-{{ courseware_transformerlab_version_dir }}.tar.gz"
|
||||
courseware_transformerlab_web_archive: "{{ courseware_downloads_dir }}/transformerlab-web-{{ courseware_transformerlab_version_dir }}.tar.gz"
|
||||
courseware_transformerlab_miniforge_installer: "{{ courseware_downloads_dir }}/transformerlab-miniforge-installer.sh"
|
||||
courseware_transformerlab_default_user_email: "student@zuccaro.me"
|
||||
courseware_transformerlab_default_user_password: "student"
|
||||
courseware_transformerlab_default_user_first_name: "Student"
|
||||
courseware_transformerlab_default_user_last_name: ""
|
||||
courseware_transformerlab_required_loader_plugins:
|
||||
- "fastchat_server"
|
||||
courseware_transformerlab_required_supports_fastchat:
|
||||
- "chat"
|
||||
- "completion"
|
||||
- "visualize_model"
|
||||
- "model_layers"
|
||||
- "rag"
|
||||
- "tools"
|
||||
- "template"
|
||||
- "embeddings"
|
||||
- "tokenize"
|
||||
- "logprobs"
|
||||
- "batched"
|
||||
courseware_netron_version: "9.0.1"
|
||||
courseware_ollama_min_version: "0.12.11"
|
||||
courseware_llama_cpp_commit: "51fa458a92d6a3f305f8fd76fc8f702e3e87ddb5"
|
||||
courseware_chunkviz_commit: "a891eacafda1f28a12373ad3b00102e68f07c57f"
|
||||
courseware_promptfoo_version: "0.119.0"
|
||||
@@ -72,6 +50,13 @@ courseware_wiki_repo: "https://git.zuccaro.me/bzuccaro/LLM-Labs.git"
|
||||
|
||||
courseware_open_webui_spec: "open-webui"
|
||||
courseware_embedding_atlas_spec: "embedding-atlas"
|
||||
courseware_lab1_qwen_filename: "Qwen3-0.6B-Q8_0.gguf"
|
||||
courseware_lab1_qwen_download_url: "https://huggingface.co/Qwen/Qwen3-0.6B-GGUF/resolve/main/Qwen3-0.6B-Q8_0.gguf?download=true"
|
||||
courseware_lab1_qwen_local_path: "{{ courseware_lab1_models_dir }}/{{ courseware_lab1_qwen_filename }}"
|
||||
courseware_lab1_qwen_model_alias: "lab1-qwen3-0.6b-q8_0"
|
||||
courseware_lab1_llama_filename: "Llama-3.2-1B.Q4_K_M.gguf"
|
||||
courseware_lab1_llama_download_url: "https://huggingface.co/DevQuasar-3/meta-llama.Llama-3.2-1B-GGUF/resolve/main/Llama-3.2-1B.Q4_K_M.gguf?download=true"
|
||||
courseware_lab1_llama_local_path: "{{ courseware_lab1_models_dir }}/{{ courseware_lab1_llama_filename }}"
|
||||
|
||||
courseware_white_rabbit_repo: "bartowski/WhiteRabbitNeo_WhiteRabbitNeo-V3-7B-GGUF"
|
||||
courseware_white_rabbit_variants:
|
||||
@@ -150,7 +135,7 @@ courseware_ollama_install_marker: "{{ courseware_markers_dir }}/ollama-installed
|
||||
courseware_services:
|
||||
- "ollama"
|
||||
- "open-webui"
|
||||
- "transformerlab"
|
||||
- "netron"
|
||||
- "chunkviz"
|
||||
- "embedding-atlas"
|
||||
- "unsloth"
|
||||
|
||||
@@ -12,17 +12,6 @@
|
||||
changed_when: false
|
||||
failed_when: false
|
||||
|
||||
- name: Stat managed TransformerLab symlink
|
||||
stat:
|
||||
path: "{{ ansible_env.HOME }}/.transformerlab"
|
||||
follow: false
|
||||
register: courseware_down_transformerlab
|
||||
|
||||
- name: Stat managed TransformerLab marker
|
||||
stat:
|
||||
path: "{{ ansible_env.HOME }}/.transformerlab/.courseware-managed"
|
||||
register: courseware_down_transformerlab_marker
|
||||
|
||||
- name: Stat managed Unsloth symlink
|
||||
stat:
|
||||
path: "{{ ansible_env.HOME }}/.unsloth"
|
||||
@@ -34,11 +23,6 @@
|
||||
path: "{{ ansible_env.HOME }}/.unsloth/.courseware-managed"
|
||||
register: courseware_down_unsloth_marker
|
||||
|
||||
- name: Stat conda environments file
|
||||
stat:
|
||||
path: "{{ ansible_env.HOME }}/.conda/environments.txt"
|
||||
register: courseware_down_conda_envs
|
||||
|
||||
- name: Stat courseware-managed Ollama install marker
|
||||
stat:
|
||||
path: "{{ courseware_ollama_install_marker }}"
|
||||
@@ -172,39 +156,6 @@
|
||||
changed_when: false
|
||||
failed_when: false
|
||||
|
||||
- name: Remove managed TransformerLab conda environment entry
|
||||
lineinfile:
|
||||
path: "{{ ansible_env.HOME }}/.conda/environments.txt"
|
||||
regexp: "^{{ (courseware_transformerlab_home ~ '/envs/transformerlab') | regex_escape() }}$"
|
||||
state: absent
|
||||
when: courseware_down_conda_envs.stat.exists
|
||||
failed_when: false
|
||||
|
||||
- name: Remove managed TransformerLab path
|
||||
file:
|
||||
path: "{{ ansible_env.HOME }}/.transformerlab"
|
||||
state: absent
|
||||
when:
|
||||
- courseware_down_transformerlab.stat.exists
|
||||
- >
|
||||
(courseware_down_transformerlab.stat.islnk and
|
||||
courseware_down_transformerlab.stat.lnk_source == courseware_transformerlab_home)
|
||||
or courseware_down_transformerlab_marker.stat.exists
|
||||
failed_when: false
|
||||
|
||||
- name: Remove managed TransformerLab home
|
||||
file:
|
||||
path: "{{ courseware_transformerlab_home }}"
|
||||
state: absent
|
||||
failed_when: false
|
||||
|
||||
- name: Remove legacy managed TransformerLab home
|
||||
file:
|
||||
path: "{{ courseware_transformerlab_legacy_home }}"
|
||||
state: absent
|
||||
when: courseware_transformerlab_legacy_home != courseware_transformerlab_home
|
||||
failed_when: false
|
||||
|
||||
- name: Remove managed Unsloth path
|
||||
file:
|
||||
path: "{{ ansible_env.HOME }}/.unsloth"
|
||||
|
||||
@@ -6,11 +6,12 @@
|
||||
- { role: preflight, tags: ["preflight"] }
|
||||
- directories
|
||||
- packages
|
||||
- netron
|
||||
- lab1_assets
|
||||
- lab_assets
|
||||
- node_runtime
|
||||
- { role: terminal, when: ansible_system == "Linux" }
|
||||
- llama_cpp
|
||||
- transformerlab
|
||||
- open_webui
|
||||
- chunkviz
|
||||
- promptfoo
|
||||
|
||||
@@ -15,10 +15,10 @@
|
||||
- "{{ courseware_tools_dir }}"
|
||||
- "{{ courseware_apps_dir }}"
|
||||
- "{{ courseware_downloads_dir }}"
|
||||
- "{{ courseware_lab1_dir }}"
|
||||
- "{{ courseware_lab2_dir }}"
|
||||
- "{{ courseware_safe_homes_dir }}"
|
||||
- "{{ courseware_transformerlab_home }}"
|
||||
- "{{ courseware_unsloth_home }}"
|
||||
- "{{ courseware_lab1_models_dir }}"
|
||||
- "{{ courseware_ollama_models_dir }}"
|
||||
|
||||
- name: Seed managed ownership markers
|
||||
@@ -27,40 +27,8 @@
|
||||
state: touch
|
||||
mode: "0644"
|
||||
loop:
|
||||
- "{{ courseware_transformerlab_home }}/.courseware-managed"
|
||||
- "{{ courseware_unsloth_home }}/.courseware-managed"
|
||||
|
||||
- name: Check existing TransformerLab path
|
||||
stat:
|
||||
path: "{{ ansible_env.HOME }}/.transformerlab"
|
||||
follow: false
|
||||
register: courseware_transformerlab_link
|
||||
|
||||
- name: Check existing TransformerLab ownership marker
|
||||
stat:
|
||||
path: "{{ ansible_env.HOME }}/.transformerlab/.courseware-managed"
|
||||
register: courseware_transformerlab_marker
|
||||
|
||||
- name: Fail if TransformerLab path is already occupied
|
||||
fail:
|
||||
msg: "{{ ansible_env.HOME }}/.transformerlab already exists and is not managed by this project."
|
||||
when:
|
||||
- courseware_transformerlab_link.stat.exists
|
||||
- >
|
||||
(
|
||||
(not courseware_transformerlab_link.stat.islnk) or
|
||||
(courseware_transformerlab_link.stat.islnk and
|
||||
courseware_transformerlab_link.stat.lnk_source != courseware_transformerlab_home)
|
||||
) and
|
||||
(not courseware_transformerlab_marker.stat.exists)
|
||||
|
||||
- name: Link TransformerLab home into project state
|
||||
file:
|
||||
src: "{{ courseware_transformerlab_home }}"
|
||||
dest: "{{ ansible_env.HOME }}/.transformerlab"
|
||||
state: link
|
||||
force: true
|
||||
|
||||
- name: Check existing Unsloth path
|
||||
stat:
|
||||
path: "{{ ansible_env.HOME }}/.unsloth"
|
||||
|
||||
@@ -0,0 +1,71 @@
|
||||
- name: Ensure Lab 1 model directory exists
|
||||
file:
|
||||
path: "{{ courseware_lab1_models_dir }}"
|
||||
state: directory
|
||||
mode: "0755"
|
||||
|
||||
- name: Check installed Ollama version
|
||||
command:
|
||||
argv:
|
||||
- "{{ courseware_ollama_bin }}"
|
||||
- --version
|
||||
register: courseware_lab1_ollama_version
|
||||
changed_when: false
|
||||
|
||||
- name: Extract installed Ollama semantic version
|
||||
set_fact:
|
||||
courseware_lab1_ollama_semver: >-
|
||||
{{
|
||||
courseware_lab1_ollama_version.stdout
|
||||
| regex_search('[0-9]+\\.[0-9]+\\.[0-9]+')
|
||||
| default('')
|
||||
}}
|
||||
|
||||
- name: Fail when Ollama is too old for Lab 1 logprobs
|
||||
fail:
|
||||
msg: >-
|
||||
Lab 1 requires Ollama {{ courseware_ollama_min_version }} or newer because
|
||||
the confidence visualizer depends on logprob support. Installed version:
|
||||
{{ courseware_lab1_ollama_version.stdout | trim }}.
|
||||
when:
|
||||
- courseware_lab1_ollama_semver | length == 0
|
||||
or not (courseware_lab1_ollama_semver is version(courseware_ollama_min_version, '>='))
|
||||
|
||||
- name: Download mirrored Lab 1 Qwen model
|
||||
get_url:
|
||||
url: "{{ courseware_lab1_qwen_download_url }}"
|
||||
dest: "{{ courseware_lab1_qwen_local_path }}"
|
||||
mode: "0644"
|
||||
|
||||
- name: Download mirrored Lab 1 Llama model
|
||||
get_url:
|
||||
url: "{{ courseware_lab1_llama_download_url }}"
|
||||
dest: "{{ courseware_lab1_llama_local_path }}"
|
||||
mode: "0644"
|
||||
|
||||
- name: Write Lab 1 Ollama Modelfile
|
||||
copy:
|
||||
dest: "{{ courseware_lab1_dir }}/Modelfile.{{ courseware_lab1_qwen_model_alias }}"
|
||||
mode: "0644"
|
||||
content: |
|
||||
FROM {{ courseware_lab1_qwen_local_path }}
|
||||
|
||||
- name: Start Ollama before Lab 1 model registration
|
||||
command:
|
||||
argv:
|
||||
- "{{ courseware_root }}/scripts/service_manager.sh"
|
||||
- start
|
||||
- ollama
|
||||
changed_when: false
|
||||
|
||||
- name: Register Lab 1 Qwen model with Ollama
|
||||
command:
|
||||
argv:
|
||||
- "{{ courseware_ollama_bin }}"
|
||||
- create
|
||||
- "{{ courseware_lab1_qwen_model_alias }}"
|
||||
- -f
|
||||
- "{{ courseware_lab1_dir }}/Modelfile.{{ courseware_lab1_qwen_model_alias }}"
|
||||
environment:
|
||||
OLLAMA_HOST: "{{ courseware_bind_host }}:{{ courseware_ports.ollama }}"
|
||||
OLLAMA_MODELS: "{{ courseware_ollama_models_dir }}"
|
||||
@@ -0,0 +1,30 @@
|
||||
- name: Create Netron virtual environment
|
||||
command:
|
||||
argv:
|
||||
- "{{ courseware_python_bin }}"
|
||||
- -m
|
||||
- venv
|
||||
- "{{ courseware_netron_venv_dir }}"
|
||||
args:
|
||||
creates: "{{ courseware_netron_venv_dir }}/bin/python"
|
||||
|
||||
- name: Upgrade Netron venv tooling
|
||||
command:
|
||||
argv:
|
||||
- "{{ courseware_netron_venv_dir }}/bin/python"
|
||||
- -m
|
||||
- pip
|
||||
- install
|
||||
- --upgrade
|
||||
- pip
|
||||
- setuptools
|
||||
- wheel
|
||||
|
||||
- name: Install Netron server runtime
|
||||
command:
|
||||
argv:
|
||||
- "{{ courseware_netron_venv_dir }}/bin/python"
|
||||
- -m
|
||||
- pip
|
||||
- install
|
||||
- "netron=={{ courseware_netron_version }}"
|
||||
@@ -7,7 +7,7 @@
|
||||
- name: Create Open WebUI virtual environment
|
||||
command:
|
||||
argv:
|
||||
- "{{ courseware_transformerlab_home }}/envs/transformerlab/bin/python"
|
||||
- "{{ courseware_python_bin }}"
|
||||
- -m
|
||||
- venv
|
||||
- "{{ courseware_venvs_dir }}/open-webui"
|
||||
@@ -39,7 +39,7 @@
|
||||
- name: Create Embedding Atlas virtual environment
|
||||
command:
|
||||
argv:
|
||||
- "{{ courseware_transformerlab_home }}/envs/transformerlab/bin/python"
|
||||
- "{{ courseware_python_bin }}"
|
||||
- -m
|
||||
- venv
|
||||
- "{{ courseware_venvs_dir }}/embedding-atlas"
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
{
|
||||
"lab1NetronUrl": "http://{{ courseware_url_host }}:{{ courseware_ports.netron }}",
|
||||
"lab3TerminalUrl": "http://{{ courseware_url_host }}:{{ courseware_ports.wetty }}{{ courseware_wetty_base_path }}"
|
||||
}
|
||||
|
||||
+8
-4
@@ -30,14 +30,18 @@
|
||||
ansible.builtin.import_role:
|
||||
name: ollama
|
||||
|
||||
- name: Include Netron setup
|
||||
ansible.builtin.import_role:
|
||||
name: netron
|
||||
|
||||
- name: Include Lab 1 asset setup
|
||||
ansible.builtin.import_role:
|
||||
name: lab1_assets
|
||||
|
||||
- name: Include llama.cpp setup
|
||||
ansible.builtin.import_role:
|
||||
name: llama-cpp
|
||||
|
||||
- name: Include Transformer Lab setup
|
||||
ansible.builtin.import_role:
|
||||
name: transformerlab
|
||||
|
||||
- name: Include Unsloth Studio setup
|
||||
ansible.builtin.import_role:
|
||||
name: unsloth
|
||||
|
||||
@@ -5,16 +5,18 @@ COURSEWARE_BIND_HOST="{{ courseware_bind_host }}"
|
||||
COURSEWARE_URL_HOST="{{ courseware_url_host }}"
|
||||
COURSEWARE_OLLAMA_PORT="{{ courseware_ports.ollama }}"
|
||||
COURSEWARE_OPEN_WEBUI_PORT="{{ courseware_ports.open_webui }}"
|
||||
COURSEWARE_TRANSFORMERLAB_PORT="{{ courseware_ports.transformerlab }}"
|
||||
COURSEWARE_NETRON_PORT="{{ courseware_ports.netron }}"
|
||||
COURSEWARE_CHUNKVIZ_PORT="{{ courseware_ports.chunkviz }}"
|
||||
COURSEWARE_EMBEDDING_ATLAS_PORT="{{ courseware_ports.embedding_atlas }}"
|
||||
COURSEWARE_UNSLOTH_PORT="{{ courseware_ports.unsloth }}"
|
||||
COURSEWARE_PROMPTFOO_PORT="{{ courseware_ports.promptfoo }}"
|
||||
COURSEWARE_WIKI_PORT="{{ courseware_ports.wiki }}"
|
||||
COURSEWARE_WETTY_PORT="{{ courseware_ports.wetty }}"
|
||||
COURSEWARE_OLLAMA_MIN_VERSION="{{ courseware_ollama_min_version }}"
|
||||
OLLAMA_BIN="{{ courseware_ollama_bin }}"
|
||||
OLLAMA_MODELS_DIR="{{ courseware_ollama_models_dir }}"
|
||||
NODE_RUNTIME_BIN_DIR="{{ courseware_node_runtime_bin_dir }}"
|
||||
NETRON_VENV="{{ courseware_netron_venv_dir }}"
|
||||
WETTY_BIN="{{ courseware_wetty_dir }}/node_modules/.bin/wetty"
|
||||
COURSEWARE_WETTY_BASE_PATH="{{ courseware_wetty_base_path }}"
|
||||
OPEN_WEBUI_VENV="{{ courseware_venvs_dir }}/open-webui"
|
||||
@@ -23,11 +25,10 @@ CHUNKVIZ_DIR="{{ courseware_repos_dir }}/ChunkViz"
|
||||
EMBEDDING_ATLAS_VENV="{{ courseware_venvs_dir }}/embedding-atlas"
|
||||
TTPS_DATASET_PATH="{{ courseware_datasets_dir }}/ttps_dataset.parquet"
|
||||
WIKI_TEST_RAW_PATH="{{ courseware_datasets_dir }}/wiki.test.raw"
|
||||
TRANSFORMERLAB_DIR="{{ courseware_transformerlab_home }}"
|
||||
TRANSFORMERLAB_DEFAULT_USER_EMAIL="{{ courseware_transformerlab_default_user_email }}"
|
||||
TRANSFORMERLAB_DEFAULT_USER_PASSWORD="{{ courseware_transformerlab_default_user_password }}"
|
||||
TRANSFORMERLAB_DEFAULT_USER_FIRST_NAME="{{ courseware_transformerlab_default_user_first_name }}"
|
||||
TRANSFORMERLAB_DEFAULT_USER_LAST_NAME="{{ courseware_transformerlab_default_user_last_name }}"
|
||||
COURSEWARE_OLLAMA_BASE_URL="http://{{ courseware_url_host }}:{{ courseware_ports.ollama }}"
|
||||
COURSEWARE_LAB1_QWEN_MODEL_PATH="{{ courseware_lab1_qwen_local_path }}"
|
||||
COURSEWARE_LAB1_LLAMA_MODEL_PATH="{{ courseware_lab1_llama_local_path }}"
|
||||
COURSEWARE_LAB1_OLLAMA_MODEL_ALIAS="{{ courseware_lab1_qwen_model_alias }}"
|
||||
UNSLOTH_BIN="{{ ansible_env.HOME }}/.local/bin/unsloth"
|
||||
PROMPTFOO_DIR="{{ courseware_promptfoo_dir }}"
|
||||
PROMPTFOO_BIN="{{ courseware_tools_dir }}/promptfoo/node_modules/.bin/promptfoo"
|
||||
|
||||
Reference in New Issue
Block a user