Optimización del Sistema Operativo para Cargas de Trabajo Intensivas
Para entornos que ejecutan bases de datos relacionales y modelos de inteligancia artificial, es crucial ajustar los parámetros del kernel y los límites de recursos del sistema operativo Linux.
Ajustes del Kernel y Memoria
Se recomienda deshabilitar las Transparent Huge Pages (THP) y ajustar los parámetros de red y memoria compartida en /etc/sysctl.conf:
# Deshabilitar THP desde GRUB
sed -i 's/GRUB_CMDLINE_LINUX="\(.*\)"/GRUB_CMDLINE_LINUX="\1 transparent_hugepage=never"/' /etc/default/grub
grub2-mkconfig -o /boot/grub2/grub.cfg
# Optimizaciones de red y memoria
cat <<EOF > /etc/sysctl.d/99-performance.conf
vm.swappiness = 0
vm.overcommit_memory = 0
net.core.somaxconn = 65535
net.ipv4.tcp_max_tw_buckets = 10000
net.ipv4.tcp_tw_reuse = 1
kernel.shmmax = 4294967296
kernel.shmall = 1048576
EOF
sysctl --system
Límites de Recursos y Configuración IPC
Para evitar que los recursos de IPC se eliminen al cerrar la sesión del usuario de la base de datos, modifique /etc/systemd/logind.conf:
echo "RemoveIPC=no" >> /etc/systemd/logind.conf
systemctl restart systemd-logind
Aumente los límites de archivos y procesos para usuarios de bases de datos en /etc/security/limits.conf:
db_user soft nofile 102400
db_user hard nofile 102400
db_user soft nproc unlimited
db_user hard nproc unlimited
db_user soft memlock unlimited
Despliegue de Controladores NVIDIA
La instalación de controladores propietarios requiere deshabilitar el módulo de código abierto nouveau.
# Bloquear nouveau
cat <<EOF > /etc/modprobe.d/blacklist-nouveau.conf
blacklist nouveau
options nouveau modeset=0
EOF
# Reconstruir la imagen de arranque
mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.bak
dracut -v /boot/initramfs-$(uname -r).img $(uname -r)
reboot
Tras reiniciar, ejecute el instalador con las banderas de omisión de verificaciones gráficas:
sudo ./NVIDIA-Linux-x86_64-550.107.02.run --no-opengl-files --no-x-check --no-nouveau-check
Entornos de Inteligencia Artificial y Modelos de Lenguaje
Preparación con Miniconda
wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh -b -p $HOME/miniconda3
source $HOME/miniconda3/bin/activate
conda create -n llm_env python=3.10 -y
conda activate llm_env
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
pip install transformers accelerate auto-gptq modelscope
Inferencia de Modelos Cuantizados
Ejemplo de carga y ejecución de un modelo LLM cuantizado utilizando la librería AutoGPTQ:
import torch
from transformers import AutoTokenizer
from auto_gptq import AutoGPTQForCausalLM
def load_model(model_directory: str):
tokenizer = AutoTokenizer.from_pretrained(model_directory, use_fast=True)
model = AutoGPTQForCausalLM.from_quantized(
model_directory,
device_map="auto",
trust_remote_code=True,
use_safetensors=True
)
return model, tokenizer
def interactive_chat(model, tokenizer):
print("Sistema listo. Escriba 'exit' para finalizar.")
while True:
user_input = input("\nUsuario: ")
if user_input.lower() == 'exit':
break
messages = [{"role": "user", "content": user_input}]
prompt = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
inputs = tokenizer([prompt], return_tensors="pt").to(model.device)
generated = model.generate(**inputs, max_new_tokens=512, temperature=0.7, top_p=0.9)
response = tokenizer.decode(generated[0][inputs.input_ids.shape[1]:], skip_special_tokens=True)
print(f"Asistente: {response}")
if __name__ == "__main__":
mdl, tok = load_model("/data/models/qwen-72b-gptq")
interactive_chat(mdl, tok)
Ejecución en Hardware Ascend NPU
Para infraestructuras basadas en procesadores Huawei Ascend, se utiliza Docker integrando el toolkit MindIE:
docker run -itd --net=host --name llm_npu_inference \
--device=/dev/davinci_manager --device=/dev/davinci0 \
-v /usr/local/Ascend/driver:/usr/local/Ascend/driver:ro \
mindie:1.0.0-300I-Duo-py311-openeuler24.03-lts bash
Despliegue Rápido con Ollama
curl -fsSL https://ollama.com/install.sh | sh
export OLLAMA_MODELS="/data/ollama_models"
systemctl daemon-reload
systemctl restart ollama
ollama run deepseek-r1:7b
Administración de Bases de Datos
Despliegue de openGauss
Archivo de configuración de clúster (cluster_config.xml) simplificado para despliegues de nodo único:
<?xml version="1.0" encoding="UTF-8"?>
<ROOT>
<CLUSTER>
<PARAM name="clusterName" value="prod_cluster" />
<PARAM name="nodeNames" value="db_node01"/>
<PARAM name="gaussdbAppPath" value="/opt/opengauss/app" />
<PARAM name="gaussdbLogPath" value="/var/log/opengauss" />
<PARAM name="backIp1s" value="192.168.1.50"/>
</CLUSTER>
<DEVICELIST>
<DEVICE sn="db_node01">
<PARAM name="name" value="db_node01"/>
<PARAM name="backIp1" value="192.168.1.50"/>
<PARAM name="dataPortBase" value="15400"/>
<PARAM name="dataNode1" value="/data/opengauss"/>
</DEVICE>
</DEVICELIST>
</ROOT>
Seervicio Systemd para gestión automática del motor de base de datos:
cat <<EOF > /etc/systemd/system/opengauss.service
[Unit]
Description=OpenGauss Database Engine
After=network.target
[Service]
Type=forking
User=omm
Group=dbgrp
LimitNOFILE=1000000
Environment="GPHOME=/opt/opengauss/install/om"
Environment="PGDATA=/data/opengauss"
Environment="GAUSSHOME=/opt/opengauss/app"
ExecStart=/opt/opengauss/install/om/script/gs_om -t start
ExecStop=/opt/opengauss/install/om/script/gs_om -t stop
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable --now opengauss
Reinstalación Limpia de MySQL 8.0
# Limpieza de componentes previos
sudo systemctl stop mysqld
sudo yum remove -y mysql-community-*
sudo rm -rf /var/lib/mysql /var/log/mysqld.log /etc/my.cnf
sudo userdel -r mysql 2>/dev/null
# Instalación desde repositorio oficial
sudo yum install -y https://dev.mysql.com/get/mysql80-community-release-el7-11.noarch.rpm
sudo yum install -y mysql-community-server
sudo systemctl enable --now mysqld
# Obtención de contraseña temporal para configuración inicial
sudo grep 'temporary password' /var/log/mysqld.log
Gestión de Contenedores Docker
Instalación offfline de los binarios de Docker y Containerd:
tar -xzvf docker-27.5.0.tgz
sudo cp docker/* /usr/bin/
# Configuración del servicio Containerd
cat <<EOF | sudo tee /etc/systemd/system/containerd.service
[Unit]
Description=containerd container runtime
After=network.target
[Service]
ExecStart=/usr/bin/containerd
Restart=always
LimitNOFILE=infinity
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now containerd docker
Despliegue de la plataforma de desarrollo de aplicaciones LLM Dify:
git clone https://github.com/langgenius/dify.git --branch 0.15.3
cd dify/docker
cp .env.example .env
docker compose up -d
Scripts de Automatización y Mantenimiento
Monitor de Consumo de CPU
Script diseñado para identificar y finalizar procesos que exceden un umbral crítico de uso de CPU:
#!/bin/bash
THRESHOLD=4000
LOG_PATH="/var/log/high_cpu_terminator.log"
pids=$(ps -eo pid,%cpu --sort=-%cpu | awk -v limit="$THRESHOLD" '$2 > limit {print $1}' | grep -v 'PID')
if [ -n "$pids" ]; then
for p in $pids; do
cpu_usage=$(ps -p $p -o %cpu | tail -1)
echo "[$(date +'%F %T')] Terminando proceso $p (CPU: $cpu_usage%)" >> $LOG_PATH
kill -9 $p
done
fi
Reparación de Entornos Chroot
Montaje de particiones críticas para tareas de rescate y reparación del sistema de archivos:
#!/bin/bash
TARGET_DISK=$1
MOUNT_DIR="/mnt/sys_rescue"
mkdir -p $MOUNT_DIR
mount ${TARGET_DISK}2 $MOUNT_DIR
mount ${TARGET_DISK}1 $MOUNT_DIR/boot
for i in /dev /dev/pts /proc /sys; do
mount --bind $i $MOUNT_DIR$i
done
chroot $MOUNT_DIR /bin/bash
Panel de Información del Sistema
#!/bin/bash
clear
echo "====================================="
echo " Resumen del Servidor"
echo "====================================="
echo "Host : $(hostname)"
echo "Kernel : $(uname -r)"
echo "Uptime : $(uptime -p)"
echo "-------------------------------------"
echo "Memoria:"
free -h | grep Mem
echo "-------------------------------------"
echo "Discos:"
df -h | grep '^/dev/'
echo "====================================="