欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 艺术 > 利用蓝耘智算平台深度搭建deepseek R1模型,进行深度机器学习

利用蓝耘智算平台深度搭建deepseek R1模型,进行深度机器学习

2025/2/11 21:38:03 来源:https://blog.csdn.net/K48932/article/details/145554132  浏览:    关键词:利用蓝耘智算平台深度搭建deepseek R1模型,进行深度机器学习

大佬请阅读

    • 前言
    • 关于DeepSeek 的显著优点
      • 卓越的性能表现
      • 低廉的训练成本
      • 广泛的应用场景
      • 开放的开源策略
    • DeepSeek 与其他 AI 对比
    • 什么是蓝耘智算平台
      • 为什么使用蓝耘智算平台搭建我们的deepseek
      • 如何使用蓝耘 GPU 智算云平台搭建我们的R1模型并成功进行调用
      • 测试1
        • 1. AVL树节点结构
        • 2. 插入操作
        • 3. 删除操作
        • 4. 旋转操作(通用版本)
        • 5. 注释说明
        • 6. 使用示例
      • 测试2
        • 说明:
        • 输出结果:
        • 改进方向:
    • 总结

前言

在人工智能技术日新月异的时代,AI 模型如雨后春笋般不断涌现,各自在不同领域施展着独特的能力。DeepSeek 以其独有的特性,在 AI 的浩瀚星空中散发着耀眼光芒。接下来,我们将深入剖析 DeepSeek 的优点以及如何利用蓝耘智算平台搭建好我们的deepseek R1模型

关于DeepSeek 的显著优点

卓越的性能表现

  • 语言生成:DeepSeek 在语言生成方面表现卓越,尤其在中文语境下优势突出。它能够生成高度符合中文表达习惯的文本,无论是日常对话、文案创作还是学术写作,都能精准把握语义,输出流畅自然的内容。而且在多轮对话中,它能很好地保持连贯性,理解上下文含义,给出贴合语境的回答。

  • 逻辑推理:面对复杂的逻辑推理任务,DeepSeek 毫不逊色。无论是数学问题求解,还是复杂的逻辑分析,它都能凭借强大的算法和训练数据,条理清晰地进行推理,给出准确的答案和完整的推理过程。

  • 计算效率:DeepSeek 的模型设计经过优化,在保证高性能的同时,对计算资源的消耗较低。这使得它可以在资源有限的环境中高效部署,无论是小型企业的服务器,还是个人电脑,都能轻松运行,大大降低了使用门槛。

低廉的训练成本

以 DeepSeek-V3 为例,其拥有 671 亿参数量和 37 亿激活参数,预训练 token 量高达 14.8 万亿,但训练成本却仅为同类模型 GPT-4o 的二十分之一。如此低的训练成本,使得企业和开发者在大规模应用时,无需承担高昂的费用,能够更经济高效地利用资源。

广泛的应用场景

DeepSeek 适用于多种场景,在智能客服领域,它能快速准确地响应客户咨询,提升客户满意度;在内容创作方面,能为创作者提供创意灵感、生成大纲甚至具体内容;在教育辅助中,帮助学生答疑解惑,辅助教师备课;在数据分析时,能从海量数据中挖掘有价值的信息。

开放的开源策略

DeepSeek 完全开源且支持免费商用和衍生开发,这吸引了全球众多开发者参与到生态建设中。开源不仅提高了模型的透明度,还促进了全球开发者的协作与改进,使得基于 DeepSeek 的创新应用不断涌现,进一步推动了 AI 技术的发展。

DeepSeek 与其他 AI 对比

对比维度DeepSeekGPT-4oGoogle Gemini
语言生成能力中文语境下表现突出,生成文本自然流畅,多轮对话连贯性强整体语言生成能力优秀,但在中文语境下的独特优势不如 DeepSeek在多模态融合下的语言生成有特色,但纯文本生成能力稍逊
逻辑推理能力面对复杂数学和逻辑问题,推理准确且过程清晰逻辑推理能力强,是行业标杆之一在逻辑推理上表现尚可,但重点在多模态任务
计算效率对计算资源消耗低,适合在资源有限环境部署计算资源需求高,部署成本相对较高计算资源需求因任务而异,多模态任务资源需求较大
训练成本以 DeepSeek-V3 为例,训练成本仅为 GPT-4o 的二十分之一训练成本高昂训练成本较高,具体数据因模型版本而异
应用场景智能客服、内容创作、教育辅助、数据分析等,在企业级应用优势明显广泛应用于各类自然语言处理场景专注于多模态任务,如图像描述、视频分析等
开源与专有性完全开源,支持免费商用和衍生开发部分新模型采取专有模式,限制开发者自由使用和深度开发部分开源,多模态相关核心技术专有性较强

综上所述,DeepSeek 在性能、成本、应用和开源等多方面展现出独特优势,尤其是在中文语境和企业级应用场景中表现突出。不同的 AI 模型各有所长,用户在选择时应综合自身需求、预算和应用场景等因素,挑选最适合的 AI 工具。而 DeepSeek 凭借其独特魅力,已在 AI 领域占据重要地位,并有望在未来持续拓展应用边界,为更多领域带来创新变革。

什么是蓝耘智算平台

蓝耘 GPU 智算云平台是依托 Kubernetes 搭建的现代化云平台,具备行业领先的灵活基础设施,以及大规模 GPU 算力资源。它为用户提供开放、高性能且性价比高的算力云服务,全方位助力 AI 客户开展模型构建、训练和推理的全业务流程,同时也为教科研客户加速科研创新。平台致力于为科研工作者、工程师以及创新者打造无可比拟的计算解决方案,其运算速度比传统云服务提供商快 35 倍,成本却降低了 30%。
image.png

在大模型训练场景下,蓝耘算力云平台将运行环境、模型以及训练框架统一打包至容器中,借助定制化的 Kubernetes 容器编排工具,实现容器的调度、管理与扩展。这一举措有效解决了开发环境设置、运维和管理等方面的问题,算法工程师能够运用统一的环境模板进行开发,避免了初期繁杂的开发环境搭建,以及在新环境中管理新算力资源的困扰,为用户提供了便捷的、开箱即用的大模型训练与推理平台。

不仅如此,针对大模型训练中常见的容器进程死机、大规模分布式训练中 GPU 驱动丢失、GPU 硬件损坏、计算节点宕机等难题,蓝耘 GPU 智算云平台都进行了定制化设计,具备自动化调度能力和强大的自愈能力,大幅提升了开发和训练效率,提高了整体资源利用率。

为什么使用蓝耘智算平台搭建我们的deepseek

我们有时候在使用deepseek的时候总是会出现服务器繁忙报错的情况,这样就让我们很难受,如果选择本地部署的话,不仅仅占用我们的内存,最小的模型就需要1GB,而且对我们显卡的要求比较高,并且我们下载的本地模型,调用起来的时候不是那么的智能,有时候也会出现答非所问的情况,所以这个时候我们需要利用我们蓝耘智算平台来进行deepseek R1模型的搭建和调用,使用联网状态的deepseek R1模型,这就可以相较于离线的模型更加智能了
1739174847012.png

如何使用蓝耘 GPU 智算云平台搭建我们的R1模型并成功进行调用

  • 我们可以在蓝耘 GPU 智算云平台进行注册,填写对应的信息我们就可以注册账号,注册好账号之后我们点击已有账号,再次输入我们的账号密码进行登录就行了
    image.png

  • 登录进来之后就是下面的界面,我们点击这个左上角的应用市场,我们可以看到很多的AI大模型,第一个就是我们的deepseek R1模型
    image.png

  • 这里的话为了各位大佬可以看的更加清晰,我们这里使用我们的deepseek-r1_1.5b_7b_8b这个模型
    image.png

  • 点进去我们可以发现相关的介绍,如果使用以及如何进行部署都写的很先详细
    DeepSeek在R1模型的基础上,使用Qwen和Llama蒸馏了几个不同大小的模型,适配目前市面上对模型尺寸的最主流的几种需求。Qwen和Llama系列模型架构相对简洁,并提供了高效的权重参数管理机制,适合在大模型上执行高效的推理能力蒸馏。蒸馏的过程中不需要对模型架构进行复杂修改 减少了开发成本 【 默认账号: lanyunuser@lanyun.net 密码:lanyunuser】
    image.png

  • 我们点击这个右上角的部署按钮,他会弹出我们的配置表格,我们这里选择按量付费,用多少付多少,GPU的型号的话我们选择这个 RTX 4090 ,显存:24GB 内存:120GB 系统盘:30GB SSD

  • GPU卡数的话我们就选择1就行了,如果有大规模需求的话可以多加几个显卡,然后点击购买我们就搞定了
    image.png

  • 如果弹出这个提示的话,我们直接点击确定就行了,然后会直接跳转到我们调用的界面
    image.png

  • 然后等待几分钟等待我们模型的创建,点击这个快速启动应用我们就可以进入到我们deepseek R1模型的使用可视化界面了
    image.png

  • 输入我们在前面应用介绍里面说到的账号密码我们进行登录操作
    【 默认账号: lanyunuser@lanyun.net 密码:lanyunuser】image.png

  • 点击登录我们就能使用我们的deepseek R1大模型了
    这里我们先询问请帮我写出AVL的左右双旋的代码以及详细的注释 deepseek 可以显示他的思考过程以及最终的答案
    1739177136001.jpg

Thought for 4 seconds > 嗯,用户让我帮他写出AVL树的左右双旋的代码,还要有详细的注释。首先,我得弄清楚用户具体需要什么。他可能是一个学生或者开发人员,正在学习或工作中涉及到AVL树相关的内容。 > > AVL树是二叉搜索树的一种自平衡结构,它的特点是每个节点的左子树的高度至少比右子树高一次。左右双旋通常指的是,当一个节点的左子树和右子树都变成单旋转或双旋转的时候,如何进行调整以保持树的平衡。 > > 用户可能需要插入、删除操作的具体实现,尤其是左边和右边的旋转方式。所以,我应该提供这些操作的代码,并给出详细的注释,这样用户能更好地理解每一步的作用。 > > 我得先确定AVL树的基本结构,然后思考在插入和删除时如何进行旋转。当插入一个节点时,可能需要判断其父节点的高度差,如果超过1,就需要进行旋转。同样的,当删除一个节点时,也要调整子树的高度。 > > 左右双旋可能指的是当左边或右边的子树不平衡到需要旋转的时候,要同时考虑另一侧的情况,比如先右旋再左旋或者反过来,这样可以保持整体的平衡。 > > 接下来,我应该设计一个AVLNode类,包含数据、左、右指针以及高度属性。然后实现插入和删除节点的函数,每个函数里都详细处理可能的旋转情况。 > > 在注释部分,要说明每一步操作的目的,比如检查高度差、进行旋转操作,以及如何调整父节点的高度。这样用户可以更清楚地理解代码的逻辑。 > > 最后,我需要测试一下这些方法,确保它们能正确构造和维护一个AVL树,这样用户在使用时不会遇到问题。 以下是AVL树的左右双旋操作(Insert、Delete)的大致思路和代码实现。由于篇幅限制,以下代码不包含类定义部分。

测试1

1. AVL树节点结构

每个节点包含:

  • value: 数据值;
  • left: 左孩子指针;
  • right: 右孩子指针;
  • height: 节点的高度(左高于右)。
2. 插入操作

插入一个新的节点时,可能需要进行一次或多次旋转以确保树的平衡。

public void insert(Node node) {Node parent = null;int heightDiff = Integer.MIN_VALUE;// 找到插入位置的父节点while (parent != null && Math.abs(height(parent.left) - height(parent.right)) > 1) {if (height(parent.left) > height(parent.right)) {if (parent.left == null) {parent.left = node;} else {// 左右双旋:先右旋后左旋rotateRight(parent);}} else {if (parent.right == null) {parent.right = node;} else {// 左右双旋:先左旋后右旋rotateLeft(parent);}}// 更新父节点的高度差heightDiff = Math.abs(height(parent.left) - height(parent.right));parent = parent.parent;}// 当前节点是新插入的叶子节点if (parent != null && parent.left == node || parent.right == node) {// 调整父节点的高度parent.height = 1 + Math.max(height(parent.left), height(parent.right));} else {// 这个情况不会发生,除非树为空throw new RuntimeException("Error: insert logic failed");}
}
3. 删除操作

删除一个节点时,也可能需要进行一次或多次旋转以确保树的平衡。

public void delete(Node node) {if (node == null || node.left == null && node.right == null) {return;}Node parent = findParent(node);// 确定哪个方向需要删除if (parent == null || (parent.left == node && height(parent.left) > height(parent.right))) {deleteLeft(parent);} else {deleteRight(parent);}
}private void deleteLeft(Node node) {Node rightChild = node.right;node.right = null;// 调整高度int newHeight = height(node.left) >= height(rightChild) ? height(node.left) : height(node.left) + 1;node.height = newHeight;// 左旋rotateLeft(node);// 调整父节点的高度(如果有的话)if (node.parent != null) {int leftHeight = height(node.parent.left);int rightHeight = height(node.parent.right);node.parent.height = 1 + Math.max(leftHeight, rightHeight);}
}private void deleteRight(Node node) {Node leftChild = node.left;node.left = null;// 调整高度int newHeight = height(node.right) >= height(leftChild) ? height(node.right) : height(node.right) + 1;node.height = newHeight;// 右旋rotateRight(node);// 调整父节点的高度(如果有的话)if (node.parent != null) {int leftHeight = height(node.parent.left);int rightHeight = height(node.parent.right);node.parent.height = 1 + Math.max(leftHeight, rightHeight);}
}// 返回指定节点的父节点
private Node findParent(Node node) {// 从根开始向上遍历直到找到正确的父节点Node current = root;while (current != null && !isChild(current, node)) {current = current.left != null ? current.left : current.right;}return current;
}// 判断一个节点是否是另一个节点的左孩子或右孩子
private boolean isChild(Node parent, Node child) {return (parent.left == child || parent.right == child);
}
4. 旋转操作(通用版本)
public void rotateRight(Node node) {// 原来是 node -> node.left -> node.left.left// 旋转后,node.right变成新的左孩子Node rightChild = node.right;node.right = rightChild.right;rightChild.right = null;// 调整高度if (height(node.left) > height(node.right)) {node.height++;} else {node.height = 1 + Math.max(height(node.left), height(node.right));}
}public void rotateLeft(Node node) {// 原来是 node -> node.right -> node.right.right// 旋转后,node.right变成新的右孩子Node leftChild = node.left;node.left = leftChild.left;leftChild.left = null;// 调整高度if (height(node.right) > height(node.left)) {node.height++;} else {node.height = 1 + Math.max(height(node.left), height(node.right));}
}
5. 注释说明
  • 插入操作

    • 遍历到合适的位置后,判断当前父节点是否满足平衡条件。
    • 如果不满足,进行左右双旋(先右旋再左旋或先左旋再右旋)。
    • 调整父节点高度。
  • 删除操作

    • 找到目标节点的父节点。
    • 根据需要删除的方向(左或右),执行相应的旋转。
    • 调整被删节点的父节点高度。
  • 旋转操作

    • rotateRight:将右子树提上来作为新的左子树。
    • rotateLeft:将左子树提上来作为新的右子树。
    • 调整节点高度,确保递归调用正确计算高度。
6. 使用示例
// 初始化根节点
Node root = new Node(1);
root.left = new Node(2);
root.right = new Node(3);// 插入节点4到右边的子树中
insert(root, 4, root.right);// 删除节点3
delete(root, root.right);// 输出验证
System.out.println("AVL Tree after operations:");
printTree(root);

测试2

我们这里让deepseek随机生成一个机器学习的代码,生成的代码依旧不赖,并且这个思考过程考虑的很充分
image.png

Thought for 4 seconds > 嗯,我现在需要帮助生成一个机器学习的实例代码。首先,我得确定用户的具体需求是什么。他可能对某个特定的模型或者任务感兴趣,比如分类、回归或者聚类。因为用户没有详细说明,所以我应该提供一个通用但具体的例子,让他可以根据自己的项目进行调整。 > > 接下来,我需要考虑选择哪种机器学习模型。常见的有线性回归、逻辑回归、随机森林、KNN等。我觉得随机森林是一种不错的选择,因为它简单易用且适用于分类问题,特别是当数据集较大时,它可以处理好过拟合的问题。 > > 然后,我要决定使用哪个编程语言。Python 是最常用的,特别是在科学计算和机器学习领域。TensorFlow 或 Keras 作为深度学习库,也很受欢迎。而 scikit-learn 是一个功能丰富的机器学习库,适用于传统方法,比如随机森林。 > > 我还需要考虑数据集的问题。可能用户没有提供具体的数据,所以我应该包括数据预处理的步骤,比如读取文件、分割训练集和测试集,以及标准化或归一化数据。这对于模型的性能有很大影响。 > > 另外,我应该添加一些可视化部分,这样用户可以更好地理解模型的表现,比如绘制误差曲线和准确率。这些代码示例可能会帮助用户在自己的项目中进行调试和分析。 > > 我还想包括评估指标,比如训练准确率、验证准确率和测试准确率。这样用户可以了解模型在不同阶段的表现,避免过拟合的问题。 > > 最后,我应该给出一些改进的建议,比如尝试不同的模型参数或数据增强,这样当用户有更多经验后,他们可以逐步优化模型性能。 > > 总的来说,我需要提供一个完整但可扩展的代码示例,让用户能够根据自己的需求进行修改和调整。同时,注释清晰是关键,这样用户即使对机器学习不太熟悉,也能理解每一部分的作用。 以下是一个简单的机器学习实例代码,使用Python的随机森林分类模型来进行手写数字分类(MNIST问题)。这个代码示例包括数据加载、预处理、模型训练和评估。
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score, confusion_matrix, classification_report, roc_auc_score
from sklearn.preprocessing import StandardScaler# 1. 加载数据集
# 这里假设你有一个CSV文件存储的手写数字,格式类似于以下:
"""
digits.csv:0,1,2,3,4,5,6,7,8,90,1,2,3,4,5,6,7,8,9...0,1,2,3,4,5,6,7,8,9...
"""
data = pd.read_csv('digits.csv')# 2. 划分训练集和测试集
X = data.drop(columns=['0','1','2','3','4','5','6','7','8','9'])  # 如果数据中每行有10个数字作为特征
y = data['0']  # 这里假设第一列是目标变量(第一个数字)X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 3. 标准化数据(如果特征有很大的范围)
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)# 4. 创建随机森林分类模型
model = RandomForestClassifier(random_state=42, n_estimators=10)# 5. 训练模型
model.fit(X_train_scaled, y_train)# 6. 预测测试集的结果
y_pred = model.predict(X_test_scaled)
y_proba = model.predict_proba(X_test_scaled)[:, :2]# 7. 计算评估指标
print("训练准确率:", accuracy_score(y_train, model.fit_transform(X_train_scaled).argmax(axis=1)))
print("\n验证准确率:", accuracy_score(y_test, y_pred))
print("\n分类报告:")
print(classification_report(y_test, y_pred))# 可视化结果(如果需要)
import matplotlib.pyplot as plt
from sklearn.metrics import confusion_matrixcm = confusion_matrix(y_test, y_pred)
plt.figure(figsize=(6, 5))
plt.title('Confusion Matrix')
plt.imshow(cm)
plt.colorbar(format='%d')
plt.show()print("\nROC-AUC Score:", roc_auc_score(y_test, y_proba[:,1]))
说明:
  1. 数据加载与预处理:代码首先从CSV文件中加载数据集,假设每行有10个数字作为特征(每列对应一个数字0-9),第一列是目标变量。
  2. 划分训练集和测试集:使用train_test_split函数将数据集分成训练集和测试集,以便进行交叉验证。
  3. 标准化数据:为了确保模型的收敛性,特征通常会被标准化。这里使用了StandardScaler
  4. 创建随机森林模型:使用RandomForestClassifier,这是一个通用的分类模型,适用于中小规模数据集。
  5. 训练模型:将训练集的特征和标签输入模型,训练模型参数以拟合数据。
  6. 预测测试集:用训练好的模型对测试集进行预测,并生成概率值(如果需要)。
  7. 计算评估指标:计算训练准确率、验证准确率以及分类报告。最后还可以通过ROC-AUC评估模型的性能。
输出结果:
  • 如果你运行这个代码,你会得到一些具体的数值,比如准确率、召回率和F1分数等,这些都是评估分类模型性能的常用指标。
  • 你还能看到混淆矩阵图形,帮助理解模型的预测结果与真实标签之间的关系。
改进方向:
  • 如果你有更多的数据,可以增加随机森林的树的数量(n_estimators参数),以提高模型性能。
  • 你也可以尝试不同的分类算法,比如逻辑回归、SVM或KNN等,比较它们在这个任务上的表现。

希望这段代码能帮助你开始一个机器学习项目!如果有具体的需求,可以告诉我,我会为你提供更针对性的建议。

总结

如果我们想退出的话我们直接就回到我们的启动页面点击关机并且销毁这个实例就行了
image.png

到这里我们可以见得我们的deepseek R1模型十分智能,还富有人性化,自此,ai不是高高在上,不再是死板的回答问题,还富有人情味了
image.png
DeepSeek 就像 AI 领域的超级引擎,凭借强大的算法和先进的技术架构,以惊人的效率处理各种复杂任务,为我们的科技探索之路照亮前行方向。
如果你也想和我一样使用deepseek的话,你不妨试试 蓝耘智算平台进行deepseek的搭建操作。有了他,你的工作效率肯定会更上一层楼的
蓝耘智算平台注册链接:https://cloud.lanyun.net//#/registerPage?promoterCode=0131

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com