Deepseek De Cero A Experto- Desde Instalacion A Produccion -mega- Today

# Crear entorno virtual python -m venv deepseek-env source deepseek-env/bin/activate # Linux/Mac # deepseek-env\Scripts\activate # Windows pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 # CUDA 11.8 pip install transformers accelerate bitsandbytes sentencepiece protobuf pip install vllm # Para inferencia en producción local 1.3 Carga del Modelo (Versión Cuantizada para Hardware Limitado) from transformers import AutoModelForCausalLM, AutoTokenizer import torch model_name = "deepseek-ai/deepseek-llm-7b-chat" # Modelo conversacional Carga con cuantización de 4 bits (requiere bitsandbytes) tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True) model = AutoModelForCausalLM.from_pretrained( model_name, device_map="auto", torch_dtype=torch.float16, load_in_4bit=True, # Reduce VRAM a ~6GB trust_remote_code=True ) Prueba de generación prompt = "Explica la diferencia entre un transformer encoder y decoder en inteligencia artificial." inputs = tokenizer(prompt, return_tensors="pt").to("cuda") outputs = model.generate(**inputs, max_new_tokens=200) print(tokenizer.decode(outputs[0], skip_special_tokens=True))

FROM vllm/vllm-openai:latest COPY --chown=ray:ray ./model_cache /root/.cache/huggingface ENV HF_HOME=/root/.cache/huggingface CMD ["--model", "deepseek-ai/deepseek-llm-7b-chat", "--port", "8000"] :

from transformers import TrainingArguments, Trainer from peft import LoraConfig, get_peft_model, prepare_model_for_kbit_training from datasets import load_dataset model = AutoModelForCausalLM.from_pretrained( "deepseek-ai/deepseek-llm-7b-chat", load_in_4bit=True, device_map="auto" ) tokenizer = AutoTokenizer.from_pretrained("deepseek-ai/deepseek-llm-7b-chat") tokenizer.pad_token = tokenizer.eos_token 2. Preparar para LoRA model = prepare_model_for_kbit_training(model) lora_config = LoraConfig( r=16, lora_alpha=32, target_modules=["q_proj", "v_proj", "k_proj", "o_proj"], lora_dropout=0.05, bias="none", task_type="CAUSAL_LM" ) model = get_peft_model(model, lora_config) 3. Cargar dataset dataset = load_dataset("json", data_files="mi_dataset.json", split="train") 4. Entrenamiento training_args = TrainingArguments( per_device_train_batch_size=4, gradient_accumulation_steps=4, num_train_epochs=3, learning_rate=2e-4, fp16=True, output_dir="./deepseek-lora", save_strategy="epoch" )

documento_completo = open("manual_largo.txt").read()[:950000] # 950k tokens response = client.chat.completions.create( model="deepseek-chat", messages=[ {"role": "system", "content": "Responde usando solo la información del siguiente documento:"}, {"role": "user", "content": f"Documento: {documento_completo}\n\nPregunta: ¿Cuál es el procedimiento de emergencia?"} ], max_tokens=2000 ) 5.1 Servicio con vLLM (Máximo rendimiento) vLLM es el servidor estándar para LLMs en producción. # Crear entorno virtual python -m venv deepseek-env

respuesta = qa_chain("¿Cómo configurar el parámetro X en el sistema?") print(respuesta["result"]) Para documentos masivos, puedes inyectar todo el contexto directamente:

print(response.choices[0].message.content) DeepSeek soporta funciones como GPT-4:

trainer = Trainer( model=model, args=training_args, train_dataset=dataset, tokenizer=tokenizer ) trainer.train() model.save_pretrained("deepseek-mi-finetuning") 3.3 Fusión del Modelo Fine-Tuned para Producción python -m peft.merge_lora \ --base_model_name deepseek-ai/deepseek-llm-7b-chat \ --lora_model_path ./deepseek-mi-finetuning \ --output_dir ./deepseek-fused Capítulo 4: RAG (Retrieval-Augmented Generation) a Escala DeepSeek con contexto de 1M de tokens permite RAG sin necesidad de chunking complejo, pero para eficiencia usaremos vectores. 4.1 Pipeline RAG con LangChain y ChromaDB from langchain.embeddings import HuggingFaceEmbeddings from langchain.vectorstores import Chroma from langchain.document_loaders import TextLoader from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain.llms import HuggingFacePipeline from langchain.chains import RetrievalQA 1. Cargar documentos loader = TextLoader("manual_tecnico.txt") documents = loader.load() splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=100) docs = splitter.split_documents(documents) 2. Crear índice vectorial embeddings = HuggingFaceEmbeddings(model_name="BAAI/bge-small-es") # Embeddings en español vectorstore = Chroma.from_documents(docs, embeddings, persist_directory="./chroma_db") 3. Conectar con DeepSeek local (o API) from langchain.llms import OpenAI # Usar compatibilidad con DeepSeek API llm = OpenAI( openai_api_key="DEEPSEEK_API_KEY", openai_api_base="https://api.deepseek.com/v1", model_name="deepseek-chat" ) 4. Cadena RAG qa_chain = RetrievalQA.from_chain_type( llm=llm, chain_type="stuff", retriever=vectorstore.as_retriever(search_kwargs={"k": 3}), return_source_documents=True ) Cargar documentos loader = TextLoader("manual_tecnico

# Instalar vLLM pip install vllm python -m vllm.entrypoints.openai.api_server --model deepseek-ai/deepseek-llm-7b-chat --tensor-parallel-size 1 --max-num-batched-tokens 4096 --port 8000

response = client.chat.completions.create( model="deepseek-chat", # Modelo optimizado para conversación messages=[ {"role": "system", "content": "Eres un experto en DevOps y sistemas distribuidos."}, {"role": "user", "content": "Escribe un Dockerfile para un servicio FastAPI con dependencias de ML."} ], temperature=0.7, max_tokens=1024 )

functions = [ { "name": "obtener_clima", "description": "Obtiene temperatura actual de una ciudad", "parameters": { "type": "object", "properties": { "ciudad": {"type": "string", "description": "Nombre de la ciudad"} }, "required": ["ciudad"] } } ] response = client.chat.completions.create( model="deepseek-chat", messages=[{"role": "user", "content": "¿Qué tiempo hace en Madrid?"}], functions=functions, function_call="auto" ) Capítulo 3: Fine-Tuning Profesional (Nivel Avanzado) DeepSeek es excelente para fine-tuning en tareas específicas (código, matemáticas, dominios médicos). 3.1 Preparación del Dataset (Formato ChatML) {"messages": [{"role": "user", "content": "¿Cómo invertir una lista en Python?"}, {"role": "assistant", "content": "Usa reversed(lista) o lista[::-1]"}]} {"messages": [{"role": "user", "content": "Explica herencia múltiple en Python."}, {"role": "assistant", "content": "Python permite herencia múltiple, pero puede causar el problema del diamante. Usa super() para MRO."}]} 3.2 Fine-Tuning con LoRA (Eficiente en memoria) Usando la biblioteca peft y trl : Cadena RAG qa_chain = RetrievalQA.from_chain_type( llm=llm

Luego desde tu app:

client = OpenAI(base_url="http://localhost:8000/v1", api_key="EMPTY") Dockerfile :