Saltar al contenido principal
InicioTutorialesInteligencia Artificial (IA)

Tutorial de DeepSeek-Coder-V2: Ejemplos, instalación, puntos de referencia

DeepSeek-Coder-V2 es un modelo de lenguaje de código de código abierto que rivaliza con el rendimiento de GPT-4, Gemini 1.5 Pro, Claude 3 Opus, Llama 3 70B o Codestral.
Actualizado ago 2024  · 8 min leer

Como asistentes de codificación de IA como GitHub Copilot ganan popularidad entre los desarrolladores, también están surgiendo alternativas de código abierto.

Un ejemplo notable es DeepSeek-Coder-V2, un sólido modelo de código abierto que utiliza técnicas avanzadas de aprendizaje automático. Está diseñado específicamente para tareas relacionadas con el código, y ofrece un rendimiento comparable al del GPT-4 en generación, finalización y comprensión de código.

En este artículo, te explicaré las características y capacidades de DeepSeek-Coder-V2 y te guiaré sobre cómo empezar a utilizar esta herramienta.

¿Qué es DeepSeek-Coder-V2?

DeepSeek-Coder-V2 es un código abierto Mezcla de Expertos (MoE) que compite con el rendimiento de GPT-4 en tareas específicas de código. Diseñado para ayudar a los desarrolladores, este modelo aporta varias características clave:

  • Multilingüe: Entrenado tanto en código como en lenguaje natural en varios idiomas, incluidos el inglés y el chino, lo que lo hace versátil para equipos de desarrollo globales.
  • Versátil: Admite una amplia gama de más de 338 lenguajes de programación, lo que satisface diversos entornos y necesidades de codificación.
  • A gran escala: Preentrenado en billones de tokens de datos de código y texto, lo que mejora su capacidad de comprensión y generación en diversos escenarios de codificación.
  • Múltiples tamaños: Los modelos están disponibles en varios tamaños, lo que permite a los desarrolladores elegir el tamaño del modelo que mejor se adapte a sus recursos informáticos y a los requisitos del proyecto.

Puedes acceder al modelo en sitio web de DeepSeekofrecen acceso de pago a la API y un chat. El código fuente está disponible en GitHub y el artículo de investigación está alojado en arXiv.

Los modelos están alojados en Huggingface-sin embargo, necesitas un hardware de nivel de investigación para ejecutar los modelos localmente debido a su tamaño.

Puntos de referencia de DeepSeek-Coder-V2

Veamos qué tal se comporta DeepSeek-Coder-V2 en las pruebas de rendimiento y cómo se compara con modelos como GPT-4 Turbo, Géminis 1.5 Pro, Claude 3 Opus, LLaMA 3-70By Codestral.

Fuente: Qihao Zhu et. al

HumanEval

El parámetro HumanEval mide la competencia en la generación de código evaluando si el código generado supera pruebas unitarias específicas. DeepSeek-Coder-V2 demuestra un rendimiento excepcional en esta prueba de referencia, alcanzando una precisión del 90,2%. Este resultado subraya la capacidad del modelo para generar fragmentos de código funcionales y precisos, incluso en escenarios complejos.

MBPP+

El punto de referencia MBPP+ se centra en la comprensión del código, evaluando la capacidad de un modelo para comprender e interpretar las estructuras y la semántica del código. DeepSeek-Coder-V2 vuelve a sobresalir en este ámbito, alcanzando una precisión del 76,2%, lo que pone de relieve su gran comprensión del significado y la funcionalidad del código.

MATH

La prueba MATH evalúa la capacidad de razonamiento matemático de un modelo dentro del código. DeepSeek-Coder-V2 mantiene su liderazgo con una precisión del 75,7%, lo que indica su destreza en el manejo de las operaciones matemáticas y la lógica incrustada en el código, un aspecto crucial de muchas tareas de programación.

GSM8K

La prueba GSM8K se centra en la resolución de problemas matemáticos de primaria, evaluando la capacidad de resolución de problemas de un modelo más allá de la mera generación de código. DeepSeek-Coder-V2 se sitúa justo detrás de Claude 3 Opus con una precisión del 94,9%, lo que demuestra su capacidad para comprender y resolver problemas matemáticos presentados en lenguaje natural.

Ayudante

El parámetro Ayudante evalúa la capacidad de un modelo para proporcionar ayuda y sugerencias sobre el código. DeepSeek-Coder-V2 lidera con una precisión del 73,7%, lo que sugiere su potencial como herramienta valiosa para los desarrolladores que buscan orientación y ayuda en tiempo real durante las tareas de codificación.

LiveCodeBench

El banco de pruebas LiveCodeBench mide el rendimiento de la generación de código en escenarios reales. DeepSeek-Coder-V2 alcanza una precisión del 43,4% (segundo tras GPT-4-Turbo-0409), lo que demuestra su capacidad para generar código funcional y utilizable en contextos prácticos.

Punto de referencia SWE

​El punto de referencia SWE-Bench evalúa específicamente los modelos de IA en función de su capacidad para realizar tareas de ingeniería de software, como la generación de código, la depuración y la comprensión de conceptos complejos de programación. En este contexto, DeepSeek-Coder-V2 obtuvo una puntuación de 12,7, lo que indica un rendimiento sólido, pero no a la cabeza. Queda por detrás de GPT-4-Turbo-0409 (18,7) y Gemini-1,5-Pro (18,3), que muestran capacidades superiores en estas tareas. Sin embargo, DeepSeek-Coder-V2 sigue superando a modelos como Claude-3-Opus (11,7), Llama-3-70B (2,7) y Codestral, lo que sugiere que es una opción fiable pero no de primer nivel para aplicaciones de ingeniería de software basadas en este punto de referencia.

Cómo funciona DeepSeek-Coder-V2

DeepSeek-Coder-V2 se basa en los cimientos del modelo DeepSeek-V2, utilizando una sofisticada arquitectura de Mezcla de Expertos (MoE) para lograr un alto rendimiento en tareas específicas de código. Este modelo aprovecha múltiples modelos de expertos, cada uno especializado en diferentes tareas de codificación, y selecciona dinámicamente al experto más relevante en función del código de entrada. Este enfoque mejora la eficacia y la precisión del modelo.

El proceso de entrenamiento de DeepSeek-Coder-V2 implica varios componentes críticos. Está preentrenado en un amplio conjunto de datos compuesto por un 60% de código fuente, un 10% de corpus matemático y un 30% de corpus de lenguaje natural, con un total de 10,2 billones de tokens. Este variado conjunto de datos permite al modelo comprender y generar código con eficacia. El conjunto de datos de código fuente incluye 1.170.000 millones de tokens procedentes de GitHub y CommonCrawl, que abarcan 338 lenguajes de programación, una ampliación significativa respecto a modelos anteriores.

Características de DeepSeek-Coder-V2

Tras el preentrenamiento, el modelo se somete a un ajuste fino con un conjunto de datos de instrucciones especializadas que incluye instrucciones de codificación, matemáticas y de lenguaje general. Este proceso mejora la capacidad de respuesta del modelo a las indicaciones del lenguaje natural, lo que transforma al modelo en un asistente útil.

Para los interesados en la arquitectura subyacente, el modelo DeepSeek-V2, en el que se basa DeepSeek-Coder-V2, introduce innovaciones como la Atención Latente Multicabezal (MLA) y el marco DeepSeekMoE. Estas innovaciones contribuyen a una inferencia eficaz y a un entrenamiento económico, como se detalla en el documento DeepSeek-V2 disponible en arXiv.

Primeros pasos con DeepSeek-Coder-V2

Hay varias formas de empezar a utilizar el modelo DeepSeek-Coder-V2. Puedes ejecutar el modelo localmente accediendo a él a través de la biblioteca transformers de Hugging Face. Sin embargo, ten en cuenta que los modelos son bastante grandes y requieren importantes recursos informáticos.

Como alternativa, DeepSeek ofrece una API de pago y una interfaz de chat online similar a ChatGPT. El chat en línea de DeepSeek también puede ejecutar código HTML y JavaScript ¡directamente en la ventana del chat! Esta función es bastante innovadora; sólo he visto algo similar en el programa Artefactos del Soneto Claude 3.5 de Claude. En este artículo, utilizaremos la función de chat para nuestros ejemplos.

DeepSeek-Coder-V2: Ejemplo de uso

Para el primer ejemplo, pediré al modelo que programe el juego de la vida de Conway en HTML y JavaScript. Le pregunté al modelo lo siguiente "¿Puedes escribir el juego de la vida de Conway en HTML?" He aquí la respuesta:

Certainly! Below is a simple implementation of Conway's Game of Life using HTML, CSS, and JavaScript. This version will display the grid in an HTML table and update it every second.
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Conway's Game of Life</title>
    <style>
        table {
            border-collapse: collapse;
        }
        td {
            width: 10px;
            height: 10px;
            border: 1px solid #ccc;
        }
        .alive {
            background-color: black;
        }
        .dead {
            background-color: white;
        }
    </style>
</head>
<body>
    <h1>Conway's Game of Life</h1>
    <table id="grid"></table>
    <script>
        const N = 50; // Grid size
        let grid = createGrid(N);
        let intervalId;
        function createGrid(N) {
            let grid = new Array(N);
            for (let i = 0; i < N; i++) {
                grid[i] = new Array(N);
                for (let j = 0; j < N; j++) {
                    grid[i][j] = Math.random() > 0.7 ? 1 : 0;
                }
            }
            return grid;
        }
        function renderGrid(grid) {
            const table = document.getElementById('grid');
            table.innerHTML = '';
            for (let i = 0; i < N; i++) {
                const row = table.insertRow();
                for (let j = 0; j < N; j++) {
                    const cell = row.insertCell();
                    cell.classList.add(grid[i][j] ? 'alive' : 'dead');
                }
            }
        }
        function updateGrid(grid) {
            const newGrid = grid.map(row => row.slice());
            for (let i = 0; i < N; i++) {
                for (let j = 0; j < N; j++) {
                    const aliveNeighbors = countAliveNeighbors(grid, i, j);
                    if (grid[i][j] === 1) {
                        newGrid[i][j] = aliveNeighbors === 2 || aliveNeighbors === 3 ? 1 : 0;
                    } else {
                        newGrid[i][j] = aliveNeighbors === 3 ? 1 : 0;
                    }
                }
            }
            return newGrid;
        }
        function countAliveNeighbors(grid, x, y) {
            let count = 0;
            for (let i = -1; i <= 1; i++) {
                for (let j = -1; j <= 1; j++) {
                    if (i === 0 && j === 0) continue;
                    const newX = (x + i + N) % N;
                    const newY = (y + j + N) % N;
                    count += grid[newX][newY];
                }
            }
            return count;
        }
        function startGame() {
            intervalId = setInterval(() => {
                grid = updateGrid(grid);
                renderGrid(grid);
            }, 1000);
        }
        renderGrid(grid);
        startGame();
    </script>
</body>
</html>

También podemos pulsar el botón "Ejecutar HTML" al final de la respuesta para obtener el juego de la vida directamente en nuestra ventana de chat.

La interfaz de chat de Deepseek permite ejecutar HTML y JavaScript

Captura de pantalla del autor.

A continuación, pedí al modelo que creara un sitio web dinámico del juego en el que yo pudiera elegir la configuración del tablero inicial. Este es el resultado, y funciona a la perfección.

Página web dinámica del juego de la vida.

Captura de pantalla del autor.

Para nuestro último ejemplo, he probado el modelo en un duro Proyecto Euler el problema "la rana saltarina "rana saltarina". Aquí tienes el código generado por el modelo:

import numpy as np

MOD = 10**9


def matrix_power(matrix, n):
    result = np.identity(len(matrix), dtype=int)

    while n > 0:
        if n % 2 == 1:
            result = np.dot(result, matrix) % MOD

        matrix = np.dot(matrix, matrix) % MOD
        n //= 2

    return result


def fib_matrix(n):
    if n == 0:
        return 0
    elif n == 1:
        return 1

    A = np.array([[1, 1, 1], [1, 0, 0], [0, 1, 0]], dtype=int)
    A_power = matrix_power(A, n - 3)
    initial_vector = np.array([2, 1, 1])

    return np.dot(A_power, initial_vector)[0] % MOD


def S(L):
    result = 0

    for n in range(1, L + 1):
        f_n = fib_matrix(n)
        result = (result + f_n**3) % MOD

    return result


# Compute S(10**14) % 10**9
print(S(10**14))

Este script tardaba siglos en ejecutarse, así que pedí al modelo que lo optimizara y obtuve el siguiente resultado:

import numpy as np

MOD = 10**9


def matrix_power(matrix, n):
    result = np.identity(len(matrix), dtype=int)

    while n > 0:
        if n % 2 == 1:
            result = np.dot(result, matrix) % MOD
        matrix = np.dot(matrix, matrix) % MOD
        n //= 2

    return result


def fib_matrix(n):
    if n == 0:
        return 0
    elif n == 1:
        return 1

    A = np.array([[1, 1, 1], [1, 0, 0], [0, 1, 0]], dtype=int)
    A_power = matrix_power(A, n - 3)
    initial_vector = np.array([2, 1, 1])

    return np.dot(A_power, initial_vector)[0] % MOD


def find_pisano_period(m):
    previous, current = 0, 1
    for i in range(m * m):
        previous, current = current, (previous + current) % m
        if previous == 0 and current == 1:
            return i + 1


def S(L):
    pisano_period = find_pisano_period(MOD)
    period_sum = 0

    for n in range(1, pisano_period + 1):
        f_n = fib_matrix(n)
        period_sum = (period_sum + f_n**3) % MOD

    full_periods, remainder = divmod(L, pisano_period)
    result = (full_periods * period_sum) % MOD

    for n in range(1, remainder + 1):
        f_n = fib_matrix(n)
        result = (result + f_n**3) % MOD

    return result


# Compute S(10**14) % 10**9
print(S(10**14))

Dejé que el código optimizado funcionara durante media hora, pero seguía sin producir ningún resultado. Aunque creo que las soluciones son correctas, el reto está en optimizar el código. Dado que sólo 328 personas han conseguido resolver este problema, no es sorprendente que el modelo no pudiera resolverlo.

Conclusión

DeepSeek-Coder-V2 es una adición notable al creciente campo de los asistentes de codificación de código abierto, demostrando un rendimiento competitivo con los modelos propietarios establecidos.

Para sacar el máximo partido a DeepSeek-Coder-V2, sigue las mejores prácticas proporcionando indicaciones claras y específicas. También te animo a que envíes comentarios a los desarrolladores si encuentras algún error.

Si queremos saber más sobre los asistentes de codificación de IA, recomiendo escuchar este podcast de DataFramed: El futuro de la programación con Kyle Daigle, COO de GitHub.


Photo of Dimitri Didmanidze
Author
Dimitri Didmanidze
LinkedIn
Soy Dimitri Didmanidze, un científico de datos que actualmente cursa un Máster en Matemáticas con especialización en Aprendizaje Automático. Mi trayectoria académica también ha incluido la investigación sobre las capacidades de los modelos basados en transformadores y la docencia a nivel universitario, lo que ha enriquecido mi comprensión de conceptos teóricos complejos. También he trabajado en el sector bancario, donde he aplicado estos principios para afrontar retos de datos del mundo real.
Temas

Aprende IA con estos cursos

Track

Developing AI Applications

23hrs hr
Learn to create AI-powered applications with the latest AI developer tools, including the OpenAI API, Hugging Face, and LangChain.
See DetailsRight Arrow
Start Course
Ver másRight Arrow
Relacionado
An avian AI exits its cage

blog

12 alternativas de código abierto a GPT-4

Alternativas de código abierto a GPT-4 que pueden ofrecer un rendimiento similar y requieren menos recursos informáticos para funcionar. Estos proyectos vienen con instrucciones, fuentes de código, pesos del modelo, conjuntos de datos e IU de chatbot.
Abid Ali Awan's photo

Abid Ali Awan

9 min

blog

¿Qué es Mistral Large 2? Cómo funciona, casos de uso y más

Mistral Large 2 es el último modelo lingüístico de Mistral AI, que compite con modelos como GPT-4o, Llama 3.1 y Claude 3 Opus.
Ryan Ong's photo

Ryan Ong

8 min

tutorial

Visión GPT-4: Guía completa para principiantes

Este tutorial le presentará todo lo que necesita saber sobre GPT-4 Vision, desde cómo acceder a él hasta ejemplos prácticos del mundo real y sus limitaciones.
Arunn Thevapalan's photo

Arunn Thevapalan

12 min

tutorial

Cómo ajustar GPT 3.5: Liberar todo el potencial de la IA

Explore GPT-3.5 Turbo y descubra el potencial transformador del ajuste fino. Aprenda a personalizar este modelo de lenguaje avanzado para aplicaciones especializadas, mejore su rendimiento y comprenda los costes asociados, la seguridad y las consideraciones de privacidad.
Moez Ali's photo

Moez Ali

11 min

tutorial

Cómo utilizar ChatGPT Code Interpreter

Todo lo que necesitas saber sobre ChatGPT Code Interpreter de OpenAI
Adel Nehme's photo

Adel Nehme

9 min

tutorial

Ajuste fino de GPT-3 mediante la API OpenAI y Python

Libere todo el potencial de GPT-3 mediante el ajuste fino. Aprenda a utilizar la API de OpenAI y Python para mejorar este modelo de red neuronal avanzado para su caso de uso específico.
Zoumana Keita 's photo

Zoumana Keita

12 min

See MoreSee More