使用腾讯云试用功能试着发布一套自己的deepseek,并持续训练模型

65 阅读4分钟

进入cloud.tencent.com/act/pro/fre… 界面选择自己想要操作的云产品,进行免费试用,选择一种镜像,后续进行手机扫码验证后,就可以在腾讯云的控制台中看到自己的试用服务器

image.png

image.png 后续步骤就不一步一步讲了,直接在本地连接服务器

为了避免依赖冲突,建议在Python虚拟环境中进行安装和运行:

python3 -m venv deepseek-env
source deepseek-env/bin/activate

上传文件

mv /root/Python-3.10.13.tgz ~/deepseek-env/bin/
mv /root/openssl-1.1.1.tar.gz ~/deepseek-env/bin/
cd deepseek-env/bin
tar xzf openssl-1.1.1.tar.gz 
tar xzf Python-3.10.13.tgz

安装新版 GCC

sudo yum install centos-release-scl


# 查看可用的工具集版本 
sudo yum list devtoolset-*

执行后如果有下面异常: Cannot find a valid baseurl for repo: centos-sclo-rh/x86_64 则执行

#将文件内的 `mirrorlist` 和 `baseurl` 替换为阿里云镜像:
sudo vi /etc/yum.repos.d/CentOS-SCLo-scl.repo

[centos-sclo-scl]
name=CentOS-7 - SCLo scl
baseurl=https://mirrors.aliyun.com/centos/7/sclo/x86_64/sclo/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo

#将文件内的 `mirrorlist` 和 `baseurl` 替换为阿里云镜像:
sudo vi /etc/yum.repos.d/CentOS-SCLo-scl-rh.repo

[centos-sclo-rh]
name=CentOS-7 - SCLo rh
baseurl=https://mirrors.aliyun.com/centos/7/sclo/x86_64/rh/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo

#再次执行
sudo yum list devtoolset-*

# 安装 GCC 11(推荐)
sudo yum install devtoolset-11-gcc devtoolset-11-gcc-c++
# 永久启用(添加到 ~/.bashrc)
echo "source /opt/rh/devtoolset-11/enable" >> ~/.bashrc 
source ~/.bashrc
gcc --version

安装新版 openssl

cd openssl-1.1.1
./config --prefix=/usr/local/openssl shared zlib
make 
make install

如果上述步骤在 config 步骤报错:Can't locate IPC/Cmd.pm in @INC ,则需要安装下面的依赖包:

sudo yum groupinstall 'Development Tools' sudo yum install perl-core zlib-devel

还是Cmd有问题的话执行

yum -y install perl-I*

把openssl的库文件全部拷贝到 /usr/lib/路径中去:

cp -r /usr/local/openssl/lib/* /usr/lib
#更新动态链接库
ldconfig

#下面进行新旧版本替换:
# 备份旧版openssl
mv /usr/bin/openssl /usr/bin/openssl.bak-$(date +%m%d)
 
# 新版openssl软链接到旧openssl位置
ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
 
# /etc/ld.so.conf 文件记录了编译时使用的动态链接库的路径,告诉链接器去哪个路径下寻找链接时需要用到的库,如果找不到,就会提示链接错误。
echo "/usr/local/openssl/lib">>/etc/ld.so.conf
 
# ldconfig 命令用于在默认搜寻目录 /lib 和 /usr/lib 以及动态库配置文件 /etc/ld.so.conf 内所列的目录下,搜索出可共享的动态链接库。
ldconfig

安装一些必要插件

sudo yum install -y \
    gcc openssl-devel bzip2-devel libffi-devel \
    zlib-devel readline-devel sqlite-devel \
    ncurses-devel xz-devel tk-devel

安装新版 Python

cd Python-3.10.13

./configure \
  --enable-optimizations \
  --enable-shared \
  --with-openssl=/usr/local/openssl \
  LDFLAGS="-Wl,-rpath,/usr/local/openssl/lib"

make -j$(nproc)
sudo make install
#查看python3.10引用的openssl版本
python3.10 -c "import ssl; print(ssl.OPENSSL_VERSION)"

如果出现python3.10: error while loading shared libraries: libpython3.10.so.1.0: cannot open shared object file: No such file or directory异常

 find /usr -name "libpython3.10.so.1.0"
 #如果查出来的地址为/usr/local/lib/libpython3.10.so.1.0

echo 'export LD_LIBRARY_PATH="/usr/local/lib:$LD_LIBRARY_PATH"' >> ~/.bashrc
source ~/.bashrc

查看当前pip指向python版本

pip3.10 --version

#查看是否安装gradio,没有安装则安装
pip3.10 show gradio

#`gradio`是一个用于创建机器学习模型的Web界面的库
pip3.10 install gradio==4.28.2  
pip3.10 install transformers datasets accelerate

python -c "import gradio; print(gradio.__version__)"
# 预期输出:4.28.2

开始安装huggingface-hub

pip3.10 install huggingface-hub==0.23.2 transformers==4.38.2


# 通过 huggingface-mirror.com 镜像站下载
HF_ENDPOINT=https://hf-mirror.com huggingface-cli download \
  --repo-type model \
  deepseek-ai/deepseek-llm-7b-base \
  --local-dir ./deepseek-7b \
  --local-dir-use-symlinks False

如果你不使用 Hugging Face 模型

  1. 需自行实现

    • 分词器(Tokenizer)
    • 模型架构(如Transformer)
    • 训练循环(反向传播/优化器)
  2. 典型问题

    • 训练时间大幅增加(需从头训练)
    • 效果下降(缺乏预训练知识)
    • 代码复杂度激增

直接从huggingface官网下载模型,会有网络翻墙,配置host等各种问题,直接从huggingface的镜像网站下载 hf-mirror.com/

页面发布:基于Gradio的交互式训练界面

创建文件train_ui.py

import gradio as gr
from transformers import AutoModelForCausalLM, AutoTokenizer, TrainingArguments, Trainer
from datasets import load_dataset
import torch

def start_training(data_dir, model_path, epochs, learning_rate):
    # 加载模型和分词器
    model = AutoModelForCausalLM.from_pretrained(model_path, torch_dtype=torch.bfloat16)
    tokenizer = AutoTokenizer.from_pretrained(model_path)
    
    # 加载数据集
    dataset = load_dataset("json", data_files={"train": f"{data_dir}/train.jsonl", "val": f"{data_dir}/val.jsonl"})
    
    # 定义训练参数
    training_args = TrainingArguments(
        output_dir="./results",
        per_device_train_batch_size=4,
        num_train_epochs=int(epochs),
        learning_rate=float(learning_rate),
        logging_steps=100,
        save_steps=500,
        fp16=True,
        report_to="none"
    )
    
    # 启动训练
    trainer = Trainer(
        model=model,
        args=training_args,
        train_dataset=dataset["train"],
        eval_dataset=dataset["val"]
    )
    trainer.train()
    return "训练完成!模型已保存至 ./results 目录"

# 构建Gradio界面
with gr.Blocks(title="DeepSeek训练控制台") as demo:
    gr.Markdown("## 🚀 DeepSeek本地训练平台")
    with gr.Row():
        data_input = gr.Textbox(label="数据集路径", placeholder="./data", value="./data")
        model_input = gr.Textbox(label="模型路径", placeholder="./deepseek-7b", value="./deepseek-7b")
    with gr.Row():
        epoch_slider = gr.Slider(1, 10, value=3, label="训练轮次")
        lr_input = gr.Number(label="学习率", value=3e-5)
    train_btn = gr.Button("开始训练", variant="primary")
    output_log = gr.Textbox(label="训练日志", interactive=False)
    
    train_btn.click(
        fn=start_training,
        inputs=[data_input, model_input, epoch_slider, lr_input],
        outputs=output_log
    )

# 启动服务(允许外部访问)
demo.launch(server_name="0.0.0.0", server_port=7860, share=False)

运行与访问


# 启动服务(后台运行)
nohup python3.10 train_ui.py > log.txt 2>&1 &

# 访问地址
# 本地访问:http://localhost:7860
# 局域网访问:http://<服务器IP>:7860


# 查看端口监听状态
sudo ss -tulnp | grep ':786'

如果服务部署成功,但局域网访问失败,在腾越云配置防火墙

image.png

image.png