descargar-modelos.sh
· 6.0 KiB · Bash
Sin formato
#!/bin/bash
# =============================================================================
# descargar-modelos.sh — Descarga de modelos según nivel de hardware
# =============================================================================
#
# Uso:
# chmod +x descargar-modelos.sh
# ./descargar-modelos.sh # Modo interactivo (pregunta el nivel)
# ./descargar-modelos.sh --nivel1 # Descarga solo modelos nivel 1
# ./descargar-modelos.sh --nivel2 # Descarga modelos nivel 2 (recomendado)
# ./descargar-modelos.sh --nivel3 # Descarga modelos nivel 3
# ./descargar-modelos.sh --todos # Descarga todos los modelos
#
# Descripción:
# Descarga los modelos recomendados según tu hardware. Cada nivel corresponde
# a los rangos de RAM mencionados en el episodio.
#
# Requisitos:
# - Ollama instalado (ver 02-instalacion/setup-ollama.sh)
# - Conexión a internet
# - Espacio en disco suficiente (ver tabla abajo)
#
# Tamaños aproximados (cuantizados):
# Nivel 1: phi3.5 (~2.5 GB) + qwen2.5-coder:1.5b (~1 GB) = ~3.5 GB
# Nivel 2: llama3.2:3b (~2 GB) + qwen2.5:7b (~4.5 GB) + deepseek-coder (~9 GB)
# Nivel 3: llama3.1:8b (~5 GB) + mistral:7b (~4.5 GB)
# Embeddings: nomic-embed-text (~0.3 GB)
#
# =============================================================================
set -euo pipefail
# Colores para output
VERDE='\033[0;32m'
AMARILLO='\033[1;33m'
AZUL='\033[0;34m'
RESET='\033[0m'
echo -e "${AZUL}==============================================${RESET}"
echo -e "${AZUL} Descarga de modelos — Laboratorio IA Local${RESET}"
echo -e "${AZUL}==============================================${RESET}"
echo ""
# --- Comprobar Ollama ----------------------------------------------------
if ! command -v ollama &>/dev/null; then
echo "ERROR: Ollama no está instalado."
echo " Ejecuta primero: curl -fsSL https://ollama.com/install.sh | sh"
exit 1
fi
echo -e " ${VERDE}✓${RESET} Ollama detectado: $(ollama --version 2>/dev/null || echo 'versión desconocida')"
echo ""
# --- Selección de nivel --------------------------------------------------
NIVEL="${1:-}"
if [[ -z "$NIVEL" ]]; then
echo "Selecciona tu nivel de hardware:"
echo ""
echo " Nivel 1 — Hardware humilde (8 GB RAM / Raspberry Pi 5)"
echo " Modelos: phi3.5, qwen2.5-coder:1.5b"
echo " Espacio: ~3.5 GB"
echo ""
echo " Nivel 2 — Punto dulce (16 GB RAM) ⭐ RECOMENDADO"
echo " Modelos: llama3.2:3b, qwen2.5:7b, deepseek-coder-v2:16b-lite-instruct-q4_K_M"
echo " Espacio: ~15 GB"
echo ""
echo " Nivel 3 — Hardware potente (32 GB+ RAM / GPU)"
echo " Modelos: llama3.1:8b, mistral:7b"
echo " Espacio: ~10 GB"
echo ""
echo " Todos — Descarga todos los modelos"
echo " Espacio: ~28 GB"
echo ""
echo " Embeddings — Solo modelo de embeddings (para RAG)"
echo " Modelo: nomic-embed-text (~0.3 GB)"
echo ""
read -r -p " ¿Qué nivel quieres descargar? [1/2/3/todos/emb]: " NIVEL
echo ""
fi
# --- Mapear nivel a modelos ---------------------------------------------
case "$NIVEL" in
--nivel1|1)
echo -e "${AZUL}Nivel 1: Hardware humilde${RESET}"
MODELOS=(
"phi3.5"
"qwen2.5-coder:1.5b"
)
;;
--nivel2|2)
echo -e "${AZUL}Nivel 2: Punto dulce (RECOMENDADO)${RESET}"
MODELOS=(
"llama3.2:3b"
"qwen2.5:7b"
"deepseek-coder-v2:16b-lite-instruct-q4_K_M"
)
;;
--nivel3|3)
echo -e "${AZUL}Nivel 3: Hardware potente${RESET}"
MODELOS=(
"llama3.1:8b"
"mistral:7b"
)
;;
--todos|todos)
echo -e "${AZUL}Todos los modelos${RESET}"
MODELOS=(
"phi3.5"
"qwen2.5-coder:1.5b"
"llama3.2:3b"
"qwen2.5:7b"
"deepseek-coder-v2:16b-lite-instruct-q4_K_M"
"llama3.1:8b"
"mistral:7b"
)
;;
--emb|emb)
echo -e "${AZUL}Solo modelo de embeddings${RESET}"
MODELOS=(
"nomic-embed-text"
)
;;
*)
echo "ERROR: Nivel no reconocido: $NIVEL"
echo " Usa: 1, 2, 3, todos, o emb"
exit 1
;;
esac
echo ""
echo " Modelos a descargar:"
for modelo in "${MODELOS[@]}"; do
echo " - $modelo"
done
echo ""
# --- Confirmar -----------------------------------------------------------
read -r -p " ¿Continuar con la descarga? [s/N]: " respuesta
if [[ ! "$respuesta" =~ ^[sS]$ ]]; then
echo " Descarga cancelada."
exit 0
fi
echo ""
# --- Descargar modelos ---------------------------------------------------
for modelo in "${MODELOS[@]}"; do
echo -e "${AMARILLO}Descargando:${RESET} ollama pull $modelo"
echo " (Esto puede tardar varios minutos según tu conexión)"
echo ""
# Ejecutar ollama pull
ollama pull "$modelo"
echo -e "${VERDE} ✓${RESET} $modelo descargado"
echo ""
done
# --- Descargar modelo de embeddings (si no está ya incluido) -------------
if [[ "$NIVEL" != "emb" && "$NIVEL" != "--emb" ]]; then
echo -e "${AMARILLO}¿Descargar también modelo de embeddings?${RESET}"
echo " nomic-embed-text (~0.3 GB) — necesario para RAG"
read -r -p " [s/N]: " respuesta
if [[ "$respuesta" =~ ^[sS]$ ]]; then
echo ""
echo -e "${AMARILLO}Descargando:${RESET} ollama pull nomic-embed-text"
ollama pull nomic-embed-text
echo -e "${VERDE} ✓${RESET} nomic-embed-text descargado"
fi
fi
# --- Resumen final -------------------------------------------------------
echo ""
echo -e "${VERDE}==============================================${RESET}"
echo -e "${VERDE} Descarga completada${RESET}"
echo -e "${VERDE}==============================================${RESET}"
echo ""
echo " Modelos disponibles localmente:"
echo ""
ollama list
echo ""
echo " Para probar un modelo:"
echo " ollama run qwen2.5:7b \"Explícame qué es Linux\""
echo ""
echo " Para eliminar un modelo:"
echo " ollama rm qwen2.5:7b"
echo ""
| 1 | #!/bin/bash |
| 2 | # ============================================================================= |
| 3 | # descargar-modelos.sh — Descarga de modelos según nivel de hardware |
| 4 | # ============================================================================= |
| 5 | # |
| 6 | # Uso: |
| 7 | # chmod +x descargar-modelos.sh |
| 8 | # ./descargar-modelos.sh # Modo interactivo (pregunta el nivel) |
| 9 | # ./descargar-modelos.sh --nivel1 # Descarga solo modelos nivel 1 |
| 10 | # ./descargar-modelos.sh --nivel2 # Descarga modelos nivel 2 (recomendado) |
| 11 | # ./descargar-modelos.sh --nivel3 # Descarga modelos nivel 3 |
| 12 | # ./descargar-modelos.sh --todos # Descarga todos los modelos |
| 13 | # |
| 14 | # Descripción: |
| 15 | # Descarga los modelos recomendados según tu hardware. Cada nivel corresponde |
| 16 | # a los rangos de RAM mencionados en el episodio. |
| 17 | # |
| 18 | # Requisitos: |
| 19 | # - Ollama instalado (ver 02-instalacion/setup-ollama.sh) |
| 20 | # - Conexión a internet |
| 21 | # - Espacio en disco suficiente (ver tabla abajo) |
| 22 | # |
| 23 | # Tamaños aproximados (cuantizados): |
| 24 | # Nivel 1: phi3.5 (~2.5 GB) + qwen2.5-coder:1.5b (~1 GB) = ~3.5 GB |
| 25 | # Nivel 2: llama3.2:3b (~2 GB) + qwen2.5:7b (~4.5 GB) + deepseek-coder (~9 GB) |
| 26 | # Nivel 3: llama3.1:8b (~5 GB) + mistral:7b (~4.5 GB) |
| 27 | # Embeddings: nomic-embed-text (~0.3 GB) |
| 28 | # |
| 29 | # ============================================================================= |
| 30 | |
| 31 | set -euo pipefail |
| 32 | |
| 33 | # Colores para output |
| 34 | VERDE='\033[0;32m' |
| 35 | AMARILLO='\033[1;33m' |
| 36 | AZUL='\033[0;34m' |
| 37 | RESET='\033[0m' |
| 38 | |
| 39 | echo -e "${AZUL}==============================================${RESET}" |
| 40 | echo -e "${AZUL} Descarga de modelos — Laboratorio IA Local${RESET}" |
| 41 | echo -e "${AZUL}==============================================${RESET}" |
| 42 | echo "" |
| 43 | |
| 44 | # --- Comprobar Ollama ---------------------------------------------------- |
| 45 | if ! command -v ollama &>/dev/null; then |
| 46 | echo "ERROR: Ollama no está instalado." |
| 47 | echo " Ejecuta primero: curl -fsSL https://ollama.com/install.sh | sh" |
| 48 | exit 1 |
| 49 | fi |
| 50 | |
| 51 | echo -e " ${VERDE}✓${RESET} Ollama detectado: $(ollama --version 2>/dev/null || echo 'versión desconocida')" |
| 52 | echo "" |
| 53 | |
| 54 | # --- Selección de nivel -------------------------------------------------- |
| 55 | NIVEL="${1:-}" |
| 56 | |
| 57 | if [[ -z "$NIVEL" ]]; then |
| 58 | echo "Selecciona tu nivel de hardware:" |
| 59 | echo "" |
| 60 | echo " Nivel 1 — Hardware humilde (8 GB RAM / Raspberry Pi 5)" |
| 61 | echo " Modelos: phi3.5, qwen2.5-coder:1.5b" |
| 62 | echo " Espacio: ~3.5 GB" |
| 63 | echo "" |
| 64 | echo " Nivel 2 — Punto dulce (16 GB RAM) ⭐ RECOMENDADO" |
| 65 | echo " Modelos: llama3.2:3b, qwen2.5:7b, deepseek-coder-v2:16b-lite-instruct-q4_K_M" |
| 66 | echo " Espacio: ~15 GB" |
| 67 | echo "" |
| 68 | echo " Nivel 3 — Hardware potente (32 GB+ RAM / GPU)" |
| 69 | echo " Modelos: llama3.1:8b, mistral:7b" |
| 70 | echo " Espacio: ~10 GB" |
| 71 | echo "" |
| 72 | echo " Todos — Descarga todos los modelos" |
| 73 | echo " Espacio: ~28 GB" |
| 74 | echo "" |
| 75 | echo " Embeddings — Solo modelo de embeddings (para RAG)" |
| 76 | echo " Modelo: nomic-embed-text (~0.3 GB)" |
| 77 | echo "" |
| 78 | read -r -p " ¿Qué nivel quieres descargar? [1/2/3/todos/emb]: " NIVEL |
| 79 | echo "" |
| 80 | fi |
| 81 | |
| 82 | # --- Mapear nivel a modelos --------------------------------------------- |
| 83 | case "$NIVEL" in |
| 84 | --nivel1|1) |
| 85 | echo -e "${AZUL}Nivel 1: Hardware humilde${RESET}" |
| 86 | MODELOS=( |
| 87 | "phi3.5" |
| 88 | "qwen2.5-coder:1.5b" |
| 89 | ) |
| 90 | ;; |
| 91 | --nivel2|2) |
| 92 | echo -e "${AZUL}Nivel 2: Punto dulce (RECOMENDADO)${RESET}" |
| 93 | MODELOS=( |
| 94 | "llama3.2:3b" |
| 95 | "qwen2.5:7b" |
| 96 | "deepseek-coder-v2:16b-lite-instruct-q4_K_M" |
| 97 | ) |
| 98 | ;; |
| 99 | --nivel3|3) |
| 100 | echo -e "${AZUL}Nivel 3: Hardware potente${RESET}" |
| 101 | MODELOS=( |
| 102 | "llama3.1:8b" |
| 103 | "mistral:7b" |
| 104 | ) |
| 105 | ;; |
| 106 | --todos|todos) |
| 107 | echo -e "${AZUL}Todos los modelos${RESET}" |
| 108 | MODELOS=( |
| 109 | "phi3.5" |
| 110 | "qwen2.5-coder:1.5b" |
| 111 | "llama3.2:3b" |
| 112 | "qwen2.5:7b" |
| 113 | "deepseek-coder-v2:16b-lite-instruct-q4_K_M" |
| 114 | "llama3.1:8b" |
| 115 | "mistral:7b" |
| 116 | ) |
| 117 | ;; |
| 118 | --emb|emb) |
| 119 | echo -e "${AZUL}Solo modelo de embeddings${RESET}" |
| 120 | MODELOS=( |
| 121 | "nomic-embed-text" |
| 122 | ) |
| 123 | ;; |
| 124 | *) |
| 125 | echo "ERROR: Nivel no reconocido: $NIVEL" |
| 126 | echo " Usa: 1, 2, 3, todos, o emb" |
| 127 | exit 1 |
| 128 | ;; |
| 129 | esac |
| 130 | |
| 131 | echo "" |
| 132 | echo " Modelos a descargar:" |
| 133 | for modelo in "${MODELOS[@]}"; do |
| 134 | echo " - $modelo" |
| 135 | done |
| 136 | echo "" |
| 137 | |
| 138 | # --- Confirmar ----------------------------------------------------------- |
| 139 | read -r -p " ¿Continuar con la descarga? [s/N]: " respuesta |
| 140 | if [[ ! "$respuesta" =~ ^[sS]$ ]]; then |
| 141 | echo " Descarga cancelada." |
| 142 | exit 0 |
| 143 | fi |
| 144 | |
| 145 | echo "" |
| 146 | |
| 147 | # --- Descargar modelos --------------------------------------------------- |
| 148 | for modelo in "${MODELOS[@]}"; do |
| 149 | echo -e "${AMARILLO}Descargando:${RESET} ollama pull $modelo" |
| 150 | echo " (Esto puede tardar varios minutos según tu conexión)" |
| 151 | echo "" |
| 152 | |
| 153 | # Ejecutar ollama pull |
| 154 | ollama pull "$modelo" |
| 155 | |
| 156 | echo -e "${VERDE} ✓${RESET} $modelo descargado" |
| 157 | echo "" |
| 158 | done |
| 159 | |
| 160 | # --- Descargar modelo de embeddings (si no está ya incluido) ------------- |
| 161 | if [[ "$NIVEL" != "emb" && "$NIVEL" != "--emb" ]]; then |
| 162 | echo -e "${AMARILLO}¿Descargar también modelo de embeddings?${RESET}" |
| 163 | echo " nomic-embed-text (~0.3 GB) — necesario para RAG" |
| 164 | read -r -p " [s/N]: " respuesta |
| 165 | if [[ "$respuesta" =~ ^[sS]$ ]]; then |
| 166 | echo "" |
| 167 | echo -e "${AMARILLO}Descargando:${RESET} ollama pull nomic-embed-text" |
| 168 | ollama pull nomic-embed-text |
| 169 | echo -e "${VERDE} ✓${RESET} nomic-embed-text descargado" |
| 170 | fi |
| 171 | fi |
| 172 | |
| 173 | # --- Resumen final ------------------------------------------------------- |
| 174 | echo "" |
| 175 | echo -e "${VERDE}==============================================${RESET}" |
| 176 | echo -e "${VERDE} Descarga completada${RESET}" |
| 177 | echo -e "${VERDE}==============================================${RESET}" |
| 178 | echo "" |
| 179 | echo " Modelos disponibles localmente:" |
| 180 | echo "" |
| 181 | ollama list |
| 182 | echo "" |
| 183 | echo " Para probar un modelo:" |
| 184 | echo " ollama run qwen2.5:7b \"Explícame qué es Linux\"" |
| 185 | echo "" |
| 186 | echo " Para eliminar un modelo:" |
| 187 | echo " ollama rm qwen2.5:7b" |
| 188 | echo "" |