Merge remote Gitea history
This commit is contained in:
@@ -81,3 +81,12 @@ bash install_openclaw.sh --onboard
|
||||
El script está pensado para Ubuntu 22.04/24.04 y WSL2. Usa el instalador oficial
|
||||
de OpenClaw, que instala Node.js si es necesario. Revisa las instrucciones
|
||||
oficiales si vas a usar otra distribución o un entorno restringido.
|
||||
|
||||
## Instalación del servidor LLM
|
||||
|
||||
```bash
|
||||
nano setup_llm_server.sh
|
||||
|
||||
chmod +x setup_llm_server.sh
|
||||
sudo ./setup_llm_server.sh
|
||||
```
|
||||
|
||||
@@ -0,0 +1,142 @@
|
||||
#!/usr/bin/env bash
|
||||
set -e
|
||||
|
||||
# Detectar usuario normal si se ejecuta con sudo
|
||||
TARGET_USER="${SUDO_USER:-$USER}"
|
||||
TARGET_HOME=$(getent passwd "$TARGET_USER" | cut -d: -f6)
|
||||
|
||||
echo "=== [1/8] Actualizando paquetes base del sistema ==="
|
||||
export DEBIAN_FRONTEND=noninteractive
|
||||
apt-get update && apt-get upgrade -y
|
||||
apt-get install -y curl wget git build-essential ufw jq python3-pip python3-venv smartmontools
|
||||
|
||||
echo "=== [2/8] Configurando Swap de 8 GB ==="
|
||||
if [ ! -f /swapfile ]; then
|
||||
fallocate -l 8G /swapfile || dd if=/dev/zero of=/swapfile bs=1M count=8192
|
||||
chmod 600 /swapfile
|
||||
mkswap /swapfile
|
||||
swapon /swapfile
|
||||
if ! grep -q '/swapfile' /etc/fstab; then
|
||||
echo '/swapfile none swap sw 0 0' >> /etc/fstab
|
||||
fi
|
||||
sysctl vm.swappiness=10
|
||||
echo 'vm.swappiness=10' > /etc/sysctl.d/99-swappiness.conf
|
||||
fi
|
||||
|
||||
echo "=== [3/8] Instalando Drivers NVIDIA y CUDA ==="
|
||||
if ! command -v nvidia-smi &> /dev/null; then
|
||||
apt-get install -y ubuntu-drivers-common
|
||||
ubuntu-drivers install --gpgpu || apt-get install -y nvidia-driver-535-server
|
||||
fi
|
||||
|
||||
echo "=== [4/8] Configurando servicio systemd para Power Limit (300W) ==="
|
||||
cat << 'EOF' > /etc/systemd/system/nvidia-power-limit.service
|
||||
[Unit]
|
||||
Description=Set NVIDIA GPU Power Limit to 300W
|
||||
After=systemd-modules-load.service
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
ExecStart=/usr/bin/nvidia-smi -pm 1
|
||||
ExecStart=/usr/bin/nvidia-smi -pl 300
|
||||
RemainAfterExit=yes
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
systemctl daemon-reload
|
||||
systemctl enable nvidia-power-limit.service
|
||||
# Intentar aplicar de inmediato si el driver ya está cargado
|
||||
nvidia-smi -pm 1 2>/dev/null || true
|
||||
nvidia-smi -pl 300 2>/dev/null || true
|
||||
|
||||
echo "=== [5/8] Instalando Ollama y configurando servicio ==="
|
||||
if ! command -v ollama &> /dev/null; then
|
||||
curl -fsSL https://ollama.com/install.sh | sh
|
||||
fi
|
||||
|
||||
# Configurar variables de Ollama para acceso de red y precarga
|
||||
mkdir -p /etc/systemd/system/ollama.service.d
|
||||
cat << 'EOF' > /etc/systemd/system/ollama.service.d/override.conf
|
||||
[Service]
|
||||
Environment="OLLAMA_HOST=0.0.0.0:11434"
|
||||
Environment="OLLAMA_KEEP_ALIVE=-1"
|
||||
Environment="OLLAMA_NUM_PARALLEL=1"
|
||||
EOF
|
||||
|
||||
systemctl daemon-reload
|
||||
systemctl restart ollama
|
||||
systemctl enable ollama
|
||||
|
||||
echo "=== [6/8] Configurando LiteLLM Proxy en entorno virtual dedicado ==="
|
||||
rm -rf /opt/litellm-env
|
||||
python3 -m venv /opt/litellm-env
|
||||
/opt/litellm-env/bin/pip install --upgrade pip
|
||||
/opt/litellm-env/bin/pip install 'litellm[proxy]' nvitop
|
||||
|
||||
# Crear configuración de LiteLLM para Tool Calling y VS Code
|
||||
cat << 'EOF' > "$TARGET_HOME/litellm_config.yaml"
|
||||
model_list:
|
||||
- model_name: qwen2.5-coder:14b
|
||||
litellm_params:
|
||||
model: ollama/qwen2.5-coder:14b
|
||||
api_base: http://127.0.0.1:11434
|
||||
max_tokens: 32768
|
||||
|
||||
litellm_settings:
|
||||
drop_params: true
|
||||
set_verbose: false
|
||||
EOF
|
||||
chown "$TARGET_USER:$TARGET_USER" "$TARGET_HOME/litellm_config.yaml"
|
||||
|
||||
# Crear servicio systemd para LiteLLM
|
||||
cat << EOF > /etc/systemd/system/litellm.service
|
||||
[Unit]
|
||||
Description=LiteLLM Proxy Service for VS Code Agent
|
||||
After=network.target ollama.service
|
||||
Wants=ollama.service
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=root
|
||||
WorkingDirectory=$TARGET_HOME
|
||||
ExecStart=/opt/litellm-env/bin/litellm --config $TARGET_HOME/litellm_config.yaml --port 8000 --host 0.0.0.0
|
||||
Restart=always
|
||||
RestartSec=5
|
||||
Environment=PYTHONUNBUFFERED=1
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
systemctl daemon-reload
|
||||
systemctl enable litellm.service
|
||||
|
||||
echo "=== [7/8] Configurando Firewall (UFW) ==="
|
||||
ufw allow 22/tcp comment 'SSH'
|
||||
ufw allow 8000/tcp comment 'LiteLLM Proxy'
|
||||
ufw --force enable
|
||||
|
||||
echo "=== [8/8] Descargando modelo qwen2.5-coder:14b ==="
|
||||
# Esperar que Ollama responda antes del pull
|
||||
until curl -s http://127.0.0.1:11434/api/tags > /dev/null; do
|
||||
echo "Esperando a que Ollama levante..."
|
||||
sleep 2
|
||||
done
|
||||
|
||||
ollama pull qwen2.5-coder:14b
|
||||
|
||||
# Iniciar LiteLLM ahora que el modelo existe
|
||||
systemctl start litellm.service
|
||||
|
||||
echo ""
|
||||
echo "=========================================================="
|
||||
echo " ¡INSTALACIÓN COMPLETADA EXITOSAMENTE!"
|
||||
echo "=========================================================="
|
||||
echo "IP del Servidor: $(hostname -I | awk '{print $1}')"
|
||||
echo "Endpoint LiteLLM: http://$(hostname -I | awk '{print $1}'):8000"
|
||||
echo ""
|
||||
echo "Nota: Si los drivers NVIDIA eran nuevos, se recomienda un reinicio:"
|
||||
echo "sudo reboot"
|
||||
echo "=========================================================="
|
||||
Reference in New Issue
Block a user