DeepSeek-OCR-2部署教程:使用Ollama容器化部署DeepSeek-OCR-2实验

1. 前言:为什么你需要关注DeepSeek-OCR-2?

如果你曾经尝试过文档识别,可能会遇到这样的烦恼:传统的OCR工具对复杂排版束手无策,表格识别错位,公式识别一塌糊涂,多语言混合文档更是识别得乱七八糟。每次处理扫描件都要手动校对,效率低得让人抓狂。

今天我要介绍的DeepSeek-OCR-2,可能会彻底改变你对文档识别的认知。这个模型采用了全新的思路——它不再像传统OCR那样机械地从左到右扫描,而是像人类一样,先理解图像的含义,然后智能地重排各个部分。听起来很神奇对吧?

更让人兴奋的是,这个模型在保持高压缩效率的同时,在多项测试中都取得了突破性的成绩。想象一下,一个复杂的文档页面,它只需要256到1120个视觉标记就能搞定,这效率提升可不是一点点。

在这篇教程里,我会手把手教你如何用Ollama容器化部署DeepSeek-OCR-2,加上vllm推理加速,再用gradio做个漂亮的前端界面。整个过程就像搭积木一样简单,跟着我做,30分钟内你就能拥有自己的智能文档识别系统。

2. 环境准备:搭建你的AI工作台

2.1 系统要求检查

在开始之前,我们先确认一下你的环境是否满足要求。DeepSeek-OCR-2对硬件有一定要求,但别担心,我会告诉你最低配置和推荐配置。

最低配置(能跑起来):

  • CPU:4核以上
  • 内存:16GB
  • 显卡:8GB显存(NVIDIA)
  • 存储:至少50GB可用空间

推荐配置(跑得流畅):

  • CPU:8核以上
  • 内存:32GB
  • 显卡:16GB显存或更高
  • 存储:100GB以上可用空间

如果你用的是云服务器,建议选择有GPU的实例。如果是本地机器,确保显卡驱动已经安装好。

2.2 安装必备工具

我们需要几个基础工具,打开终端,一条条执行下面的命令:

# 更新系统包管理器
sudo apt update && sudo apt upgrade -y

# 安装Docker(如果还没安装)
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

# 安装Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/download/v2.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

# 验证安装
docker --version
docker-compose --version

看到版本号输出,说明安装成功了。如果遇到权限问题,记得把当前用户加入docker组:

sudo usermod -aG docker $USER

然后重新登录或者重启终端。

2.3 准备项目目录

创建一个专门的项目目录,把所有文件都放在这里,方便管理:

# 创建项目目录
mkdir deepseek-ocr-2-deployment
cd deepseek-ocr-2-deployment

# 创建必要的子目录
mkdir -p models configs data/uploads data/results

目录结构现在应该是这样的:

deepseek-ocr-2-deployment/
├── models/          # 存放模型文件
├── configs/         # 配置文件
├── data/
│   ├── uploads/     # 上传的文件
│   └── results/     # 识别结果

3. 核心部署:三件套配置详解

3.1 Ollama容器化部署

Ollama是我们部署模型的核心工具,它让模型管理变得特别简单。我们通过Docker来运行Ollama,这样环境隔离,不会影响系统其他部分。

首先创建Ollama的配置文件:

# 创建docker-compose.yml文件
cat > docker-compose.yml << 'EOF'
version: '3.8'

services:
  ollama:
    image: ollama/ollama:latest
    container_name: deepseek-ocr-ollama
    restart: unless-stopped
    ports:
      - "11434:11434"
    volumes:
      - ./models:/root/.ollama
      - ./configs/ollama:/etc/ollama
    environment:
      - OLLAMA_HOST=0.0.0.0
      - OLLAMA_KEEP_ALIVE=24h
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu]
    networks:
      - ocr-network

networks:
  ocr-network:
    driver: bridge
EOF

这个配置做了几件重要的事情:

  1. 使用最新的Ollama镜像
  2. 把11434端口映射出来,方便我们访问
  3. 把模型目录挂载到本地,这样模型文件不会丢失
  4. 配置了GPU支持(如果你有NVIDIA显卡)
  5. 设置了网络,方便后续服务间通信

现在启动Ollama服务:

# 启动Ollama容器
docker-compose up -d ollama

# 查看运行状态
docker-compose ps

# 查看日志,确认服务正常启动
docker-compose logs -f ollama

看到类似这样的输出,说明Ollama启动成功了:

ollama_1  | time=2024-XX-XXTXX:XX:XX.XXXZ level=INFO source=ollama.go:123 msg="ollama server is running"

3.2 拉取和配置DeepSeek-OCR-2模型

Ollama服务跑起来后,我们需要把DeepSeek-OCR-2模型拉取到本地。这里有个小技巧,我们可以先创建一个模型配置文件,这样拉取的时候可以指定一些优化参数。

创建模型配置文件:

# 创建Modelfile
cat > configs/ollama/Modelfile << 'EOF'
FROM deepseek-ocr:latest

# 设置系统提示词
SYSTEM """你是一个专业的文档识别助手,能够准确识别各种格式的文档内容。"""

# 配置参数
PARAMETER temperature 0.1
PARAMETER top_p 0.9
PARAMETER num_ctx 4096
EOF

现在拉取模型:

# 进入Ollama容器执行命令
docker exec deepseek-ocr-ollama ollama pull deepseek-ocr:latest

# 或者使用API方式拉取
curl -X POST http://localhost:11434/api/pull -d '{
  "name": "deepseek-ocr:latest"
}'

拉取过程可能需要一些时间,取决于你的网速。模型大小大概在7-8GB左右,所以耐心等待一下。你可以用下面的命令查看进度:

# 查看正在拉取的模型
docker-compose logs -f ollama | grep -i "pulling\|downloading"

拉取完成后,验证一下:

# 列出已安装的模型
curl http://localhost:11434/api/tags

# 测试模型响应
curl http://localhost:11434/api/generate -d '{
  "model": "deepseek-ocr:latest",
  "prompt": "Hello",
  "stream": false
}'

如果看到模型返回响应,说明模型已经准备好了。

3.3 vLLM推理加速配置

DeepSeek-OCR-2模型本身已经很快了,但加上vLLM能让它飞起来。vLLM是一个专门为大规模语言模型设计的高效推理引擎,能显著提升处理速度。

我们先创建vLLM的服务配置:

# 创建vLLM的docker-compose配置
cat >> docker-compose.yml << 'EOF'

  vllm:
    image: vllm/vllm-openai:latest
    container_name: deepseek-ocr-vllm
    restart: unless-stopped
    ports:
      - "8000:8000"
    volumes:
      - ./models:/models
    command: >
      --model deepseek-ocr:latest
      --served-model-name deepseek-ocr
      --host 0.0.0.0
      --port 8000
      --tensor-parallel-size 1
      --gpu-memory-utilization 0.9
      --max-model-len 4096
      --download-dir /models
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu]
    depends_on:
      - ollama
    networks:
      - ocr-network
EOF

这个配置的关键点:

  1. 使用vLLM的官方镜像
  2. 把8000端口映射出来,这是OpenAI兼容的API端口
  3. 指定使用我们刚才拉取的deepseek-ocr模型
  4. 配置GPU内存使用率为90%,留点余量给系统
  5. 设置最大上下文长度为4096,适合文档处理

启动vLLM服务:

# 更新并启动vLLM
docker-compose up -d vllm

# 等待服务启动
sleep 10

# 测试vLLM API
curl http://localhost:8000/v1/models

你应该能看到类似这样的响应:

{
  "object": "list",
  "data": [
    {
      "id": "deepseek-ocr",
      "object": "model",
      "created": 1677652288,
      "owned_by": "vllm"
    }
  ]
}

3.4 Gradio前端界面搭建

有了强大的后端,现在我们需要一个好看易用的前端界面。Gradio是个不错的选择,它能让我们的OCR系统有个漂亮的Web界面。

创建Gradio应用:

# 创建app目录
mkdir app
cd app

# 创建主应用文件
cat > app.py << 'EOF'
import gradio as gr
import requests
import json
import base64
import os
from pathlib import Path
import tempfile

# 配置
VLLM_API_URL = "http://vllm:8000/v1/chat/completions"
UPLOAD_DIR = "/data/uploads"
RESULT_DIR = "/data/results"

# 确保目录存在
os.makedirs(UPLOAD_DIR, exist_ok=True)
os.makedirs(RESULT_DIR, exist_ok=True)

def process_document(file, use_enhanced_mode=True):
    """
    处理上传的文档
    """
    if file is None:
        return "请先上传文件", None
    
    try:
        # 保存上传的文件
        file_path = os.path.join(UPLOAD_DIR, os.path.basename(file.name))
        with open(file_path, "wb") as f:
            f.write(file.read())
        
        # 读取文件并编码为base64
        with open(file_path, "rb") as f:
            file_data = base64.b64encode(f.read()).decode('utf-8')
        
        # 构建请求
        messages = [
            {
                "role": "user",
                "content": [
                    {
                        "type": "text",
                        "text": "请识别这个文档中的所有文字内容,包括表格、公式等特殊格式。保持原文的格式和排版。"
                    },
                    {
                        "type": "image_url",
                        "image_url": {
                            "url": f"data:image/jpeg;base64,{file_data}"
                        }
                    }
                ]
            }
        ]
        
        # 调用vLLM API
        payload = {
            "model": "deepseek-ocr",
            "messages": messages,
            "max_tokens": 4000,
            "temperature": 0.1,
            "stream": False
        }
        
        response = requests.post(VLLM_API_URL, json=payload, timeout=300)
        
        if response.status_code == 200:
            result = response.json()
            text_content = result['choices'][0]['message']['content']
            
            # 保存结果
            result_file = os.path.join(RESULT_DIR, f"{Path(file_path).stem}_result.txt")
            with open(result_file, "w", encoding="utf-8") as f:
                f.write(text_content)
            
            return text_content, result_file
        else:
            return f"识别失败: {response.status_code} - {response.text}", None
            
    except Exception as e:
        return f"处理过程中出错: {str(e)}", None

def create_interface():
    """
    创建Gradio界面
    """
    with gr.Blocks(title="DeepSeek-OCR-2 文档识别系统", theme=gr.themes.Soft()) as demo:
        gr.Markdown("# 📄 DeepSeek-OCR-2 智能文档识别系统")
        gr.Markdown("上传图片或PDF文档,系统将自动识别其中的文字内容")
        
        with gr.Row():
            with gr.Column(scale=1):
                # 文件上传区域
                file_input = gr.File(
                    label="上传文档",
                    file_types=[".png", ".jpg", ".jpeg", ".pdf", ".tiff"],
                    type="binary"
                )
                
                # 处理选项
                enhanced_checkbox = gr.Checkbox(
                    label="启用增强模式(识别表格和公式)",
                    value=True
                )
                
                process_btn = gr.Button("开始识别", variant="primary")
                
            with gr.Column(scale=2):
                # 结果显示区域
                output_text = gr.Textbox(
                    label="识别结果",
                    lines=20,
                    max_lines=50,
                    show_copy_button=True
                )
                
                # 结果文件下载
                output_file = gr.File(
                    label="下载识别结果",
                    visible=False
                )
        
        # 处理示例
        gr.Examples(
            examples=[
                ["示例文档1.png"],
                ["示例文档2.pdf"]
            ],
            inputs=file_input,
            label="点击使用示例文档"
        )
        
        # 绑定事件
        process_btn.click(
            fn=process_document,
            inputs=[file_input, enhanced_checkbox],
            outputs=[output_text, output_file]
        )
        
        # 当有结果文件时显示下载按钮
        def toggle_download_visibility(file_output):
            return gr.File(visible=file_output is not None)
        
        output_text.change(
            fn=toggle_download_visibility,
            inputs=output_file,
            outputs=output_file
        )
    
    return demo

if __name__ == "__main__":
    demo = create_interface()
    demo.launch(
        server_name="0.0.0.0",
        server_port=7860,
        share=False
    )
EOF

现在创建Gradio的Docker配置:

# 回到项目根目录
cd ..

# 添加Gradio服务到docker-compose.yml
cat >> docker-compose.yml << 'EOF'

  gradio:
    build: ./app
    container_name: deepseek-ocr-gradio
    restart: unless-stopped
    ports:
      - "7860:7860"
    volumes:
      - ./data:/data
      - ./app:/app
    environment:
      - VLLM_API_URL=http://vllm:8000/v1/chat/completions
    depends_on:
      - vllm
    networks:
      - ocr-network
EOF

创建Gradio的Dockerfile:

# 创建Dockerfile
cat > app/Dockerfile << 'EOF'
FROM python:3.9-slim

WORKDIR /app

# 安装系统依赖
RUN apt-get update && apt-get install -y \
    gcc \
    g++ \
    && rm -rf /var/lib/apt/lists/*

# 复制依赖文件
COPY requirements.txt .

# 安装Python依赖
RUN pip install --no-cache-dir -r requirements.txt

# 复制应用代码
COPY . .

# 创建非root用户
RUN useradd -m -u 1000 appuser && chown -R appuser:appuser /app
USER appuser

# 启动应用
CMD ["python", "app.py"]
EOF

创建依赖文件:

cat > app/requirements.txt << 'EOF'
gradio>=4.0.0
requests>=2.31.0
pillow>=10.0.0
python-multipart>=0.0.6
pypdf2>=3.0.0
EOF

4. 一键启动:让整个系统跑起来

4.1 完整启动流程

现在所有组件都配置好了,我们来启动整个系统:

# 回到项目根目录
cd deepseek-ocr-2-deployment

# 启动所有服务
docker-compose up -d

# 查看所有服务状态
docker-compose ps

你应该能看到三个服务都在运行:

名称                         状态               端口
deepseek-ocr-ollama         运行中             0.0.0.0:11434->11434/tcp
deepseek-ocr-vllm           运行中             0.0.0.0:8000->8000/tcp  
deepseek-ocr-gradio         运行中             0.0.0.0:7860->7860/tcp

4.2 验证服务连通性

让我们检查一下各个服务是否正常工作:

# 检查Ollama
curl http://localhost:11434/api/tags

# 检查vLLM
curl http://localhost:8000/v1/models

# 检查Gradio
curl -I http://localhost:7860

如果都返回正常,恭喜你!系统已经部署成功了。

4.3 访问Web界面

打开你的浏览器,访问 http://你的服务器IP:7860,就能看到DeepSeek-OCR-2的Web界面了。

界面应该长这样:

  • 顶部是大标题"DeepSeek-OCR-2 智能文档识别系统"
  • 左边是文件上传区域,可以上传图片或PDF
  • 右边是结果显示区域,识别出来的文字会显示在这里
  • 下面还有示例文档可以直接点击使用

5. 实际使用:从上传到识别的完整流程

5.1 上传文档并识别

现在让我们实际用一下这个系统。我准备了几个测试场景,你可以跟着一起试试:

场景一:识别普通文档图片

  1. 点击"上传文档"按钮
  2. 选择一张包含文字的图片(比如截图、照片)
  3. 确保"启用增强模式"是勾选状态
  4. 点击"开始识别"按钮
  5. 等待几秒钟,右边就会显示识别结果

场景二:识别PDF文档

  1. 上传一个PDF文件
  2. 系统会自动处理PDF的所有页面
  3. 识别结果会按页面顺序显示
  4. 你可以点击"下载识别结果"保存为文本文件

场景三:使用示例文档

  1. 直接点击界面下方的示例文档
  2. 系统会自动加载并识别
  3. 这是最快体验系统功能的方式

5.2 查看和保存结果

识别完成后,你可以:

  1. 直接复制文本:点击结果文本框右上角的复制按钮
  2. 下载文本文件:点击"下载识别结果"按钮
  3. 查看历史记录:所有处理过的文件都会保存在 data/results/ 目录下

5.3 处理复杂文档的技巧

DeepSeek-OCR-2在处理复杂文档时特别强大,这里分享几个使用技巧:

处理表格文档:

  • 确保图片清晰,表格线条完整
  • 启用增强模式,能更好地识别表格结构
  • 识别结果会尽量保持表格的格式

处理多语言文档:

  • 系统支持中英文混合识别
  • 对于其他语言,识别准确率可能会有所下降
  • 如果遇到特殊字符,可以尝试调整图片质量

处理低质量扫描件:

  • 如果扫描件模糊,可以尝试先做简单的图像增强
  • 调整图片的对比度和亮度可能会有帮助
  • 系统对倾斜的文档也有一定的矫正能力

6. 常见问题与解决方案

6.1 部署过程中的问题

问题1:Docker启动失败

错误:端口被占用

解决:

# 查看哪个进程占用了端口
sudo lsof -i :7860
sudo lsof -i :8000
sudo lsof -i :11434

# 停止占用进程或修改docker-compose.yml中的端口映射
# 修改后重新启动
docker-compose down
docker-compose up -d

问题2:GPU无法使用

警告:没有检测到GPU

解决:

# 检查NVIDIA驱动
nvidia-smi

# 安装NVIDIA Container Toolkit
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit
sudo systemctl restart docker

# 重新启动服务
docker-compose down
docker-compose up -d

6.2 使用过程中的问题

问题3:识别速度慢

识别一个文档需要很长时间

解决:

# 调整vLLM配置,增加批处理大小
# 修改docker-compose.yml中vLLM服务的command部分
command: >
  --model deepseek-ocr:latest
  --served-model-name deepseek-ocr
  --host 0.0.0.0
  --port 8000
  --tensor-parallel-size 1
  --gpu-memory-utilization 0.9
  --max-model-len 4096
  --download-dir /models
  --max-num-batched-tokens 2048  # 增加这个值
  --batch-size 4  # 增加批处理大小

# 重启vLLM服务
docker-compose restart vllm

问题4:内存不足

容器因为内存不足被杀死

解决:

# 减少vLLM的内存使用
# 修改gpu-memory-utilization参数
--gpu-memory-utilization 0.7  # 从0.9降低到0.7

# 或者限制容器的内存使用
# 在docker-compose.yml中添加
deploy:
  resources:
    limits:
      memory: 8G
    reservations:
      devices:
        - driver: nvidia
          count: all
          capabilities: [gpu]

# 重启服务
docker-compose down
docker-compose up -d

6.3 模型相关的问题

问题5:模型加载失败

错误:无法加载模型

解决:

# 检查模型文件
docker exec deepseek-ocr-ollama ls -la /root/.ollama/models/

# 重新拉取模型
docker exec deepseek-ocr-ollama ollama rm deepseek-ocr
docker exec deepseek-ocr-ollama ollama pull deepseek-ocr:latest

# 检查模型是否可用
curl http://localhost:11434/api/tags

问题6:识别准确率不高

某些文字识别错误

解决:

  1. 优化图片质量:确保上传的图片清晰、光线均匀
  2. 调整识别参数:在app.py中调整temperature等参数
  3. 使用预处理:对图片进行简单的预处理,如去噪、二值化
  4. 分区域识别:对于复杂文档,可以尝试分区域识别后合并结果

7. 性能优化与进阶配置

7.1 提升识别速度

如果你需要处理大量文档,可以尝试这些优化:

启用批处理:

# 修改app.py中的process_document函数
# 添加批处理支持
def process_batch(files, use_enhanced_mode=True):
    """
    批量处理文档
    """
    results = []
    for file in files:
        result, _ = process_document(file, use_enhanced_mode)
        results.append(result)
    return results

使用异步处理:

# 使用异步提高并发能力
import asyncio
import aiohttp

async def async_process_document(file):
    async with aiohttp.ClientSession() as session:
        # 异步调用API
        pass

7.2 扩展系统功能

添加文件格式支持:

# 扩展支持的文件类型
SUPPORTED_FORMATS = {
    '.png': 'image/png',
    '.jpg': 'image/jpeg', 
    '.jpeg': 'image/jpeg',
    '.pdf': 'application/pdf',
    '.tiff': 'image/tiff',
    '.bmp': 'image/bmp',
    '.webp': 'image/webp'
}

添加结果后处理:

def post_process_text(text):
    """
    对识别结果进行后处理
    """
    # 去除多余的空行
    lines = [line.strip() for line in text.split('\n') if line.strip()]
    
    # 合并短行
    processed_lines = []
    current_line = ""
    
    for line in lines:
        if len(line) < 20 and not line.endswith(('。', '!', '?', ';')):
            current_line += line + " "
        else:
            if current_line:
                processed_lines.append(current_line.strip())
                current_line = ""
            processed_lines.append(line)
    
    if current_line:
        processed_lines.append(current_line.strip())
    
    return '\n'.join(processed_lines)

7.3 监控与日志

添加系统监控:

# 创建监控脚本
cat > monitor.sh << 'EOF'
#!/bin/bash

# 监控服务状态
echo "=== 服务状态 ==="
docker-compose ps

echo -e "\n=== GPU使用情况 ==="
nvidia-smi --query-gpu=utilization.gpu,memory.used,memory.total --format=csv

echo -e "\n=== 磁盘使用情况 ==="
df -h /data

echo -e "\n=== 最近日志 ==="
docker-compose logs --tail=10
EOF

chmod +x monitor.sh

设置日志轮转:

# 在docker-compose.yml中添加日志配置
services:
  ollama:
    # ... 其他配置
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"

8. 总结与下一步建议

8.1 部署成果回顾

经过这个教程,我们已经成功搭建了一个完整的DeepSeek-OCR-2文档识别系统。让我们回顾一下都实现了什么:

  1. 容器化部署:使用Docker和Docker Compose,让部署变得简单可重复
  2. 模型服务化:通过Ollama管理模型,vLLM提供高速推理
  3. 友好界面:Gradio提供了直观的Web操作界面
  4. 完整流程:从上传文档到获取识别结果,整个流程完全自动化

这个系统有几个明显的优势:

  • 部署简单:一条命令就能启动所有服务
  • 使用方便:浏览器访问,无需复杂配置
  • 性能优秀:vLLM加速让识别速度飞快
  • 扩展性强:可以轻松添加新功能或集成到其他系统

8.2 实际应用场景

基于这个系统,你可以做很多事情:

个人使用:

  • 快速提取图片中的文字内容
  • 整理扫描的文档资料
  • 处理收到的PDF文件

办公场景:

  • 批量处理会议纪要图片
  • 自动化文档归档
  • 快速搜索图片中的关键信息

开发集成:

  • 作为其他系统的OCR模块
  • 构建文档处理流水线
  • 开发智能办公助手

8.3 后续优化方向

如果你想让这个系统更强大,可以考虑这些方向:

功能增强:

  • 添加批量处理功能,一次上传多个文件
  • 支持更多文件格式,比如Word、Excel
  • 添加结果导出选项,支持Word、PDF等格式

性能优化:

  • 使用更快的存储,比如SSD
  • 增加GPU数量,提升并发处理能力
  • 优化图片预处理流程

系统集成:

  • 添加用户认证和权限管理
  • 集成到现有的文档管理系统
  • 开发API接口,供其他系统调用

模型优化:

  • 针对特定类型的文档进行微调
  • 集成多个OCR模型,根据场景选择最优的
  • 添加后处理规则,提升特定场景的准确率

8.4 最后的小建议

  1. 定期更新:关注DeepSeek-OCR-2的更新,及时升级到新版本
  2. 数据备份:定期备份模型文件和配置
  3. 监控运行:设置简单的监控,及时发现问题
  4. 社区参与:遇到问题可以在相关社区提问,也能帮助其他人

这个系统现在应该已经在你的机器上运行起来了。我建议你先用一些测试文档熟悉操作流程,然后逐步应用到实际工作中。记住,任何技术工具都要在实际使用中不断调整和优化,才能发挥最大价值。

如果你在部署或使用过程中遇到任何问题,或者有改进的想法,欢迎分享和交流。技术总是在实践中不断进步的,你的实际使用经验可能会帮助到很多人。


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐