DeepSeek-V3-Base 模型技术解析
DeepSeek-V3-Base 模型技术解析
目录
- 引言
- DeepSeek-V3-Base 模型概述
- 模型架构
- 3.1 Transformer 基础
- 3.2 DeepSeek-V3-Base 的改进
- 训练过程
- 4.1 数据预处理
- 4.2 训练策略
- 4.3 优化器与学习率调度
- 模型性能评估
- 5.1 基准测试
- 5.2 实际应用案例
- 模型优化与调参
- 6.1 超参数调优
- 6.2 模型压缩与加速
- 未来发展方向
- 结论
1. 引言
近年来,深度学习在自然语言处理(NLP)领域取得了显著的进展,尤其是基于 Transformer 架构的模型,如 BERT、GPT 等,已经在多个任务上达到了 state-of-the-art 的性能。DeepSeek-V3-Base 模型作为这一领域的最新成果,不仅在性能上有所突破,还在模型架构和训练策略上进行了多项创新。本文将深入探讨 DeepSeek-V3-Base 模型的技术细节,包括其架构设计、训练过程、性能评估以及未来发展方向。
2. DeepSeek-V3-Base 模型概述
DeepSeek-V3-Base 是一个基于 Transformer 架构的预训练语言模型,旨在通过大规模数据训练,捕捉语言的深层次语义信息。该模型在多个 NLP 任务上表现出色,如文本分类、命名实体识别、机器翻译等。DeepSeek-V3-Base 的主要特点包括:
- 大规模预训练:使用了超过 1000 亿个 tokens 的语料进行预训练,涵盖了多种语言和领域。
- 多任务学习:在预训练过程中引入了多任务学习机制,使得模型能够更好地泛化到不同的任务。
- 高效的训练策略:采用了混合精度训练和分布式训练等技术,显著提高了训练效率。
3. 模型架构
3.1 Transformer 基础
Transformer 架构由 Vaswani 等人在 2017 年提出,其核心思想是通过自注意力机制(Self-Attention)来捕捉输入序列中的全局依赖关系。Transformer 模型由编码器(Encoder)和解码器(Decoder)两部分组成,每部分都由多个相同的层堆叠而成。每一层包含两个主要模块:多头自注意力机制(Multi-Head Self-Attention)和前馈神经网络(Feed-Forward Neural Network)。
3.2 DeepSeek-V3-Base 的改进
DeepSeek-V3-Base 在标准 Transformer 架构的基础上进行了多项改进,主要包括:
- 层次化注意力机制:引入了层次化注意力机制,使得模型能够在不同粒度上捕捉语义信息。具体来说,模型首先在词级别进行注意力计算,然后在句子级别进行二次注意力计算,从而更好地理解长文本的语义结构。
- 动态掩码机制:在预训练过程中,采用了动态掩码机制,即每次训练时随机选择一部分 tokens 进行掩码,而不是固定掩码。这种方法使得模型能够更好地适应不同的任务和场景。
- 混合精度训练:为了加速训练过程,DeepSeek-V3-Base 采用了混合精度训练技术,即在计算过程中使用半精度浮点数(FP16),从而减少了内存占用和计算量,同时保持了模型的精度。
4. 训练过程
4.1 数据预处理
数据预处理是模型训练的关键步骤,直接影响模型的表现。DeepSeek-V3-Base 的数据预处理流程包括以下几个步骤:
4.1.1 文本清洗
- 去除噪声:删除 HTML 标签、特殊符号、多余的空格等。
- 标准化:将文本转换为统一格式,例如将所有字母转换为小写。
- 分词:使用分词工具(如 BPE 或 WordPiece)将文本分割为子词(subword)单元。
4.1.2 子词编码
DeepSeek-V3-Base 使用 Byte Pair Encoding (BPE) 算法将文本转换为子词单元。BPE 通过逐步合并高频字符对来构建词汇表,从而有效处理未登录词(OOV)问题。
以下是 BPE 的 Python 实现示例:
from collections import defaultdict, Counterdef get_stats(vocab):pairs = defaultdict(int)for word, freq in vocab.items():symbols = word.split()for i in range(len(symbols) - 1):pairs[symbols[i], symbols[i + 1]] += freqreturn pairsdef merge_vocab(pair, vocab):v_out = {}bigram = ' '.join(pair)replacement = ''.join(pair)for word in vocab:w_out = word.replace(bigram, replacement)v_out[w_out] = vocab[word]return v_outdef bpe_tokenize(text, num_merges=100):vocab = {' '.join(word): freq for word, freq in Counter(text.split()).items()}for i in range(num_merges):pairs = get_stats(vocab)if not pairs:breakbest = max(pairs, key=pairs.get)vocab = merge_vocab(best, vocab)return vocab
4.1.3 数据格式化
将分词后的文本转换为模型输入格式,通常是 [CLS]
+ 文本 + [SEP]
的形式,并生成对应的注意力掩码(Attention Mask)和段标识(Segment ID)。
4.2 训练策略
DeepSeek-V3-Base 的训练策略分为 预训练 和 微调 两个阶段。
4.2.1 预训练
- 目标:通过大规模无监督学习,学习语言的通用表示。
- 任务:采用 掩码语言模型(Masked Language Model, MLM) 和 下一句预测(Next Sentence Prediction, NSP) 任务。
- MLM:随机掩码部分输入 tokens,让模型预测被掩码的 tokens。
- NSP:让模型判断两个句子是否连续。
- 动态掩码:每次训练时随机选择不同的 tokens 进行掩码,提高模型的泛化能力。
4.2.2 微调
- 目标:在特定任务的有标签数据上进一步训练,使模型适应具体任务。
- 任务:根据任务类型(如分类、序列标注、生成等)设计对应的损失函数。
- 分布式训练:使用多 GPU 或 TPU 进行并行训练,加速训练过程。
- 梯度累积:在显存有限的情况下,通过累积多个小批次的梯度,模拟大批次训练的效果。
以下是分布式训练的 PyTorch 实现示例:
import torch
import torch.distributed as dist
from torch.nn.parallel import DistributedDataParallel as DDPdef setup(rank, world_size):dist.init_process_group("gloo", rank=rank, world_size=world_size)def cleanup():dist.destroy_process_group()def train(rank, world_size, model, dataloader, optimizer, epochs):setup(rank, world_size)model = DDP(model.to(rank), device_ids=[rank])for epoch in range(epochs):for batch in dataloader:inputs, labels = batchinputs, labels = inputs.to(rank), labels.to(rank)optimizer.zero_grad()outputs = model(inputs)loss = torch.nn.functional.cross_entropy(outputs, labels)loss.backward()optimizer.step()cleanup()
4.3 优化器与学习率调度
4.3.1 优化器
DeepSeek-V3-Base 使用 AdamW 优化器,它是 Adam 优化器的改进版本,加入了权重衰减(Weight Decay),能够有效防止过拟合。
以下是 AdamW 的 PyTorch 实现:
from torch.optim import AdamWoptimizer = AdamW(model.parameters(), lr=2e-5, weight_decay=0.01)
4.3.2 学习率调度
DeepSeek-V3-Base 采用 余弦退火学习率调度(Cosine Annealing Learning Rate Scheduling),学习率在训练过程中按照余弦函数的形式逐渐减小,从而在训练初期快速收敛,在训练后期精细调整模型参数。
以下是余弦退火学习率调度的 PyTorch 实现:
from torch.optim.lr_scheduler import CosineAnnealingLRscheduler = CosineAnnealingLR(optimizer, T_max=num_training_steps, eta_min=1e-6)for epoch in range(epochs):for batch in dataloader:train_step(batch)scheduler.step()
5. 模型性能评估
5.1 基准测试
DeepSeek-V3-Base 在 GLUE、SuperGLUE、SQuAD 等基准测试上进行了评估,结果显示其在大多数任务上达到了 state-of-the-art 的性能。
5.2 实际应用案例
DeepSeek-V3-Base 在实际应用中表现优异,以下是其在智能客服、机器翻译和文本分类中的具体实现方法及 Python 代码示例。
5.2.1 智能客服
智能客服的核心是理解用户意图并生成合适的回复。DeepSeek-V3-Base 可以通过微调实现这一功能。
from transformers import pipeline# 加载预训练的 DeepSeek-V3-Base 模型
chatbot = pipeline("text-generation", model="deepseek-v3-base")# 用户输入
user_input = "我的订单什么时候发货?"# 生成回复
response = chatbot(user_input, max_length=50, num_return_sequences=1)
print("客服回复:", response[0]['generated_text'])
5.2.2 机器翻译
DeepSeek-V3-Base 可以用于构建机器翻译系统,将一种语言翻译为另一种语言。
from transformers import pipeline# 加载预训练的 DeepSeek-V3-Base 翻译模型
translator = pipeline("translation_en_to_fr", model="deepseek-v3-base")# 输入文本
text = "Hello, how are you?"# 翻译为法语
translated_text = translator(text, max_length=50)
print("翻译结果:", translated_text[0]['translation_text'])
5.2.3 文本分类
DeepSeek-V3-Base 可以用于文本分类任务,例如情感分析或主题分类。
from transformers import pipeline# 加载预训练的 DeepSeek-V3-Base 分类模型
classifier = pipeline("text-classification", model="deepseek-v3-base")# 输入文本
text = "This movie was fantastic! I loved every minute of it."# 分类结果
result = classifier(text)
print("分类结果:", result[0]['label'], "置信度:", result[0]['score'])
6. 模型优化与调参
6.1 超参数调优
超参数调优是提升模型性能的重要手段。常用的方法包括网格搜索、随机搜索和贝叶斯优化。
网格搜索示例
from sklearn.model_selection import GridSearchCV
from transformers import Trainer, TrainingArguments# 定义超参数网格
param_grid = {'learning_rate': [1e-5, 2e-5, 5e-5],'num_train_epochs': [3, 5, 10],'per_device_train_batch_size': [16, 32, 64]
}# 使用 GridSearchCV 进行调优
grid_search = GridSearchCV(estimator=Trainer, param_grid=param_grid, scoring='accuracy')
grid_search.fit(train_dataset)
print("最佳超参数:", grid_search.best_params_)
贝叶斯优化示例
from bayes_opt import BayesianOptimization# 定义目标函数
def objective(learning_rate, num_train_epochs, batch_size):training_args = TrainingArguments(learning_rate=learning_rate,num_train_epochs=int(num_train_epochs),per_device_train_batch_size=int(batch_size),output_dir='./results')trainer = Trainer(model=model, args=training_args, train_dataset=train_dataset)trainer.train()return trainer.evaluate()['eval_accuracy']# 定义参数范围
pbounds = {'learning_rate': (1e-5, 5e-5),'num_train_epochs': (3, 10),'batch_size': (16, 64)
}# 运行贝叶斯优化
optimizer = BayesianOptimization(f=objective, pbounds=pbounds)
optimizer.maximize(init_points=2, n_iter=3)
print("最佳超参数:", optimizer.max)
6.2 模型压缩与加速
模型压缩与加速是部署大型模型的关键技术,常用的方法包括模型剪枝、量化和知识蒸馏。
模型剪枝示例
import torch
import torch.nn.utils.prune as prune# 定义模型
model = torch.nn.Linear(10, 1)# 剪枝 50% 的权重
prune.l1_unstructured(model, name='weight', amount=0.5)# 查看剪枝后的权重
print(model.weight)
量化示例
from transformers import TFAutoModelForSequenceClassification
import tensorflow as tf# 加载模型
model = TFAutoModelForSequenceClassification.from_pretrained("deepseek-v3-base")# 量化模型
converter = tf.lite.TFLiteConverter.from_keras_model(model)
converter.optimizations = [tf.lite.Optimize.DEFAULT]
quantized_model = converter.convert()# 保存量化模型
with open('quantized_model.tflite', 'wb') as f:f.write(quantized_model)
知识蒸馏示例
from transformers import DistilBertForSequenceClassification, Trainer, TrainingArguments# 加载教师模型
teacher_model = DistilBertForSequenceClassification.from_pretrained("deepseek-v3-base")# 定义学生模型
student_model = DistilBertForSequenceClassification.from_pretrained("distilbert-base-uncased")# 定义训练参数
training_args = TrainingArguments(output_dir='./results',num_train_epochs=3,per_device_train_batch_size=16,learning_rate=2e-5
)# 定义 Trainer
trainer = Trainer(model=student_model,args=training_args,train_dataset=train_dataset,teacher_model=teacher_model
)# 开始蒸馏训练
trainer.train()
7. 未来发展方向
- 多模态学习:融合文本、图像、音频等多模态信息。
- 自监督学习:设计更有效的自监督任务。
- 可解释性:提高模型的决策透明度。
8. 结论
DeepSeek-V3-Base 通过创新的模型架构和训练策略,在 NLP 任务中展现了卓越的性能。未来,随着多模态学习、自监督学习和可解释性等方向的深入研究,DeepSeek-V3-Base 将在更多应用场景中发挥重要作用。
以上是完整版的 DeepSeek-V3-Base 模型技术解析,涵盖了模型架构、训练过程、性能评估、实际应用案例以及模型优化与调参等多个方面,并提供了详细的 Python 实现代码。希望本文能为读者提供全面的技术参考和实践指导!
相关文章:
DeepSeek-V3-Base 模型技术解析
DeepSeek-V3-Base 模型技术解析 目录 引言DeepSeek-V3-Base 模型概述模型架构 3.1 Transformer 基础3.2 DeepSeek-V3-Base 的改进 训练过程 4.1 数据预处理4.2 训练策略4.3 优化器与学习率调度 模型性能评估 5.1 基准测试5.2 实际应用案例 模型优化与调参 6.1 超参数调优6.2 …...
Qt5 中 QGroupBox 标题下沉问题解决
我们设置了QGroupBox 样式之后,发现标题下沉了,那么如何解决呢? QGroupBox {font: 12pt "微软雅黑";color:white;border:1px solid white;border-radius:6px; } 解决后的效果 下面是解决方法: QGroupBox {font: 12pt "微软雅黑";color:white;bo…...
Linux Debian安装ClamAV和命令行扫描病毒方法,以及用Linux Shell编写了一个批量扫描病毒的脚本
ClamAV是一个开源的跨平台病毒扫描引擎,用于检测恶意软件、病毒、木马等安全威胁。 一、Linux Debian安装ClamAV 在Linux Debian系统上安装ClamAV,你可以按照以下步骤进行: 更新软件包列表: 打开终端并更新你的软件包列表&#…...
数据结构与算法之动态规划: LeetCode 53. 最大子数组和 (Ts版)
最大子数组和 https://leetcode.cn/problems/maximum-subarray/description/ 描述 给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和子数组是数组中的一个连续部分 示例 1 …...
活动预告 | Microsoft Azure 在线技术公开课:使用 Azure OpenAI 服务构建生成式应用
课程介绍 通过 Microsoft Learn 免费参加 Microsoft Azure 在线技术公开课,掌握创造新机遇所需的技能,加快对 Microsoft Cloud 技术的了解。参加我们举办的“使用 Azure OpenAI 服务构建生成式应用”活动,了解如何使用包括 GPT 在内的强大的…...
Python爬虫(二)- Requests 高级使用教程
文章目录 前言一、Session 对象1. 简介2. 跨请求保持 Cookie3. 设置缺省数据4. 方法级别参数不被跨请求保持5. 会话作为上下文管理器6. 移除字典参数中的值 二、请求与响应1. 请求与响应对象1.1 获取响应头信息1.2 获取发送到服务器的请求头信息 三、SSL 证书验证1. 忽略 SSL 证…...
协议幻变者:DeviceNet转ModbusTCP网关开启机器手臂智能新纪元
技术背景DeviceNet是一种广泛应用于工业自动化领域的现场总线标准,它能够实现控制器与现场设备之间的高效通信,常用于连接各种传感器、执行器以及其他工业设备,如机器人、电机驱动器等,具有实时性强、可靠性高的特点。而ModbusTCP…...
自定义有序Map
package cn.ziqirj.common.utils;import lombok.Getter; import lombok.Setter;import java.util.ArrayList; import java.util.List;/*** 模拟Map集合,key不可重复,按插入顺序排序* author zhangji** param <T>*/ public class CustomOrderlyMap&…...
CA系统的设计(CA证书生成,吊销,数字签名生成)
CA系统概述 CA认证系统是一种基于公钥密码基础设施(PKI)的信息安全技术,它可以为网络通信双方提供身份认证、数据加密、数字签名等功能。CA认证系统的核心是证书授权机构(CA),它负责为用户(节点…...
流计算需要框架吗?SPL 可能是更好的选择
流数据源通常是动态、无界的,看起来与静态、有限的批数据源区别较大,传统的数据库技术在架构上难以直接处理流数据源,只能让位于后来者。heron\samza\storm\spark\flink等计算框架最先完成突破,在流计算技术中占得先发优势。这些框…...
Vue-Router之嵌套路由
在路由配置中,配置children import Vue from vue import VueRouter from vue-routerVue.use(VueRouter)const router new VueRouter({mode: history,base: import.meta.env.BASE_URL,routes: [{path: /,redirect: /home},{path: /home,name: home,component: () &…...
MySQL 读写分离
MySQL 读写分离 一、配置主库(Master) 1.修改主库的配置文件 修改主库的 my.cnf 配置文件,生成二进制日志 (binary log) 和服务器唯一ID,这是实现主从复制的必要配置 [mysqld] # skip-grant-tables userroot port3306 basedir/usr/local/mysql datad…...
记一次音频无输出的解决方案
啊啊啊,刷个抖音就发现个死电脑死都不出声,捣鼓了一天才解决 打开wav文件时,提示错误找不到音频播放设备 0xc00d36fa 起初以为是声卡坏了,就到官网下载、更新了声卡驱动。无用什么驱动精灵也检测了,但也测不出啥来。…...
3D数学基础2
矩阵的行列式 在任意方阵中都存在至少一个标量,称作该方阵的行列式。在线性代数中,行列式有很多有用的性质 线性运算法则 方阵 M M M的行列式记作 ∣ M ∣ |M| ∣M∣或“det M”。非方阵矩阵的行列式是未定义的。 注意,在书写行列式时&…...
Java开发生态2024年度总结报告
1 关键要点 尽管数据显示 Java 17 是最常用 JDK,但其用户占比并未超过半数。根据 New Relic 2024 Java 生态系统状态报告,Java 17、11 和 8 的用户比例分别为 35%、33% 和 29%。New Relic 数据中所谓“快速采用”指 Java 21 的采用率仅为 1.4%。虽相较 J…...
1月第三讲:Java子线程无法获取Attributes的解决方法
在Java多线程编程中,开发者经常会遇到子线程无法获取主线程设置的Attributes的问题。Attributes通常用于存储与当前线程相关的数据,尤其在Web应用中,它们常用于请求上下文的管理。然而,由于Java线程是独立运行的,每个线…...
更新金碟云星空单据供应商和币别
--应付单 select FSUPPLIERID from [dbo].[T_AP_PAYABLE] where FBILLNO=AP2024121670 select FSUPPLIERID,FCURRENCYID,* from [dbo].[T_AP_PAYABLE] where FBILLNO=AP2024121670 -- update T_AP_PAYABLE set FSUPPLIERID=100567 where FBILLNO=AP2024121670 -- update T_…...
from memory cache 修复记录
背景 浏览器的页签图标,不想要了 改代码:设置浏览器页签的代码 本地环境测试,没有问题,一次性修改成功 于是打包,部署到测试环境,然而,还是有 接下的解决方法: 1、清除浏览器缓…...
spring入门程序
安装eclipse https://blog.csdn.net/qq_36437991/article/details/131644570 新建maven项目 安装依赖包 pom.xml <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation&quo…...
用于实现无缝滚动效果的vue-seamless-scroll插件
它通常用于在网页或应用中实现内容的自动滚动效果,如新闻公告、图片轮播等,支持横向和纵向滚动,并且可以自定义滚动速度、方向等参数,适合展示一些需要持续循环展示的信息。 在Vue2项目中使用vue-seamless-scroll插件的步骤如下&…...
借助 FinClip 跨端技术探索鸿蒙原生应用开发之旅
在当今数字化浪潮汹涌澎湃的时代,移动应用开发领域正经历着深刻的变革与创新。鸿蒙操作系统的崛起,以其独特的分布式架构和强大的性能表现,吸引了众多开发者的目光。而FinClip 跨端技术的出现,为开发者涉足鸿蒙原生应用开发提供了…...
【机器学习】机器学习的基本分类-自监督学习-对比学习(Contrastive Learning)
对比学习是一种自监督学习方法,其目标是学习数据的表征(representation),使得在表征空间中,相似的样本距离更近,不相似的样本距离更远。通过设计对比损失函数(Contrastive Loss)&…...
python之eval函数
功能:将字符串str当成有效的表达式来求值并返回计算结果 语法:eval(source,[,globals[,locals]])->value 参数: source:一个python表达式或函数compile()返回的代码对象globals:可选。必须是dictionarylocals&am…...
NXP i.MX8系列平台开发讲解 - 5.3 调试篇(二) - 掌握Dynamic debug调试
专栏文章目录传送门:返回专栏目录 Hi, 我是你们的老朋友,主要专注于嵌入式软件开发,有兴趣不要忘记点击关注【码思途远】 文章目录 目录 掌握Dynamic debug调试 1. 认识Dynamic debug 2. 内核配置 3. 使用Dynamic debug 3.1 查看当前的…...
QT----------常用界面组件的使用
一、QComboBox 类 主要功能:提供一个下拉列表,用户可以从中选择一个或多个选项。 #include <QApplication> #include <QComboBox> #include <QVBoxLayout> #include <QWidget> #include <QMessageBox>int main(int argc…...
重新整理机器学习和神经网络框架
本篇重新梳理了人工智能(AI)、机器学习(ML)、神经网络(NN)和深度学习(DL)之间存在一定的包含关系,以下是它们的关系及各自内容,以及人工智能领域中深度学习分支对比整理。…...
AJAX详解
AJAX是前后端交互的重要工具 结合前后端交互基础理解:前后端交互详解(建议收藏)-CSDN博客 1. AJAX - 到底什么是Ajax? ajax 全名 async javascript and XML(异步JavaScript和XML),是一种用于向服务器异步发送 HTTP 请求并接收响应的技术。 XML 指可扩…...
golang中的异常处理机制
今天是2024最后一天,祝大家新年梦想成真,继续我的魅力golang,昨天发的错误处理,是明显的可预见、可恢复的问题,然而,不可预见的问题,往往更多,golang也有自己的一套,完全…...
HTML5 开关(Toggle Switch)详细讲解
HTML5 开关(Toggle Switch)详细讲解 1. 任务概述 开关(Toggle Switch)是一种用于表示二元状态(如开/关)的用户界面控件。用户可以通过点击开关来切换状态,常见于设置选项、开关功能等场景。 2…...
【前端】Node.js使用教程
目录 一、?Node.js开发环境和编译 1.1 安装Node.js 1.2 创建一个Node.js项目 1.3 编写Node.js程序 1.4 运行Node.js程序 1.5 使用Node.js模块 二、高级的Node.js编程概念和示例 2.1 异步编程 2.2 错误处理 2.3 网络请求 2.4 构建Web服务器 2.5 数据库交互 三、No…...
在CodeBlocks搭建SDL2工程构建TFT彩屏模拟器虚拟TFT彩屏幕显示
在CodeBlocks搭建SDL2工程构建TFT彩屏模拟器虚拟TFT彩屏幕显示 参考文章源码下载地址一、SDL2的创建、初始化、退出二、系统基本Tick、彩屏刷新、按键事件三、彩屏获取与设置颜色四、彩屏填充颜色及清屏五、彩屏显示中文和英文字符串六、彩屏显示数字七、彩屏初始化八、主函数测…...
BurstAttention:高效的分布式注意力计算框架
BurstAttention:高效的分布式注意力计算框架 在现代大型语言模型(LLMs)的应用中,提升注意力机制的计算效率已成为研究的热点。当前,提升计算效率主要有两种方法:一种是优化单设备的计算和存储能力…...
sentinel集成nacos启动报[check-update] get changed dataId error, code: 403错误排查及解决
整合nacos报403错误 因为平台写的一个限流代码逻辑有问题,所以准备使用sentinel来限流。平台依赖里面已经引入了,之前也测试过,把sentinel关于nacos的配置加上后,启动一直输出403错误 [fixed-10.0.20.188_8848-test] [check-upda…...
[TOTP]android kotlin实现 totp身份验证器 类似Google身份验证器
背景:自己或者公司用一些谷歌身份验证器或者microsoft身份验证器,下载来源不明,或者有广告,使用不安全。于是自己写一个,安全放心使用。 代码已开源:shixiaotian/sxt-android-totp: android totp authenti…...
IDEA+Docker一键部署项目SpringBoot项目
文章目录 1. 部署项目的传统方式2. 前置工作3. SSH配置4. 连接Docker守护进程5. 创建简单的SpringBoot应用程序6. 编写Dockerfile文件7. 配置远程部署 7.1 创建配置7.2 绑定端口7.3 添加执行前要运行的任务 8. 部署项目9. 开放防火墙的 11020 端口10. 访问项目11. 可能遇到的问…...
【发票提取明细+发票号改名】批量提取PDF电子发票明细导出Excel表格并改名技术难点,批量PDF多区域内容识别提取明细并用内容改名的小结
1、图片版的发票提取表格改名 【批量图片发票识别表格】批量图片发票的提取Excel表格和提取字段改名,扫描发票识别表格,拍照发票识别表格,图片发票识别改名我们在工作中很多扫描发票,拍照发票,需要整理成excel表格&am…...
pyQT + OpenCV相关练习
一、设计思路 1、思路分析与设计 本段代码是一个使用 PyQt6 和 OpenCV 创建的图像处理应用程序。其主要功能是通过一个图形界面让用户对图片进行基本的图像处理操作,如灰度化、翻转、旋转、亮度与对比度调整,以及一些滤镜效果(模糊、锐化、边…...
石岩路边理发好去处
周末带娃去罗租公园玩,罗租公园旁边就是百佳华和如意豪庭小区,发现如意豪庭小区对面挺多路边理发摊点 理发摊点聚焦在这里的原因是刚好前面城管来了暂时避避,例如还有一个阿姨剪到一半就跟着过来。这里的城管只是拍了一处没有摊位的地方&…...
音视频入门基础:MPEG2-PS专题(2)——使用FFmpeg命令生成ps文件
一、错误的命令 通过FFmpeg命令可以将mp4文件转换为ps文件,PS文件中包含PS流数据。 由于PS流/PS文件对应的FFInputFormat结构为: const FFInputFormat ff_mpegps_demuxer {.p.name "mpeg",.p.long_name NULL_IF_CONFIG_SMALL…...
整合版canal ha搭建--基于1.1.4版本
开启MySql Binlog(1)修改MySql配置文件(2)重启MySql服务,查看配置是否生效(3)配置起效果后,创建canal用户,并赋予权限安装canal-admin(1)解压 canal.admin-1…...
[python SQLAlchemy数据库操作入门]-15.联合查询,跨表获取股票数据
哈喽,大家好,我是木头左! 在开始探讨如何利用SQLAlchemy实现复杂的联合查询之前,首先需要深入理解其核心组件——对象关系映射(ORM)。ORM允许开发者使用Python类来表示数据库中的表,从而以一种更直观、面向对象的方式来操作数据库。 SQLAlchemy中的JOIN操作详解 在SQLA…...
PTA数据结构作业一
6-1 链表的插入算法 本题要求实现一个插入函数,实现在链表llist中的元素x之后插入一个元素y的操作。 函数接口定义: int InsertPost_link(LinkList llist, DataType x, DataType y); 其中 llist是操作的链表,x是待插入元素y的前驱节点元素…...
前端(九)js介绍(2)
js介绍(2) 文章目录 js介绍(2)一、函数1.1函数的两种形式1.2函数的作用域1.3声明与提升 二、bom操作三、dom操作 一、函数 1.1函数的两种形式 //有参函数 //js中的函数只能返回一个值,如果要返回多个需要放在数组或对象中 function func(a,b){return ab } func(1,…...
CUTLASS:高性能 CUDA 线性代数模板库详解
CUTLASS:高性能 CUDA 线性代数模板库详解 引言什么是 CUTLASS?CUTLASS 的主要特点: CUTLASS 的用途如何安装 CUTLASS1. 环境准备2. 下载 CUTLASS3. 构建 CUTLASS4. 设置环境变量5. 验证安装 使用 CUTLASSCUTLASS 的优势总结 引言 在深度学习…...
关于CISP报名费用详情
CISP即“注册信息安全专业人员”,是中国信息安全测评中心实施的国家认证项目,旨在培养信息安全领域的专业人才。对于有意报考CISP的考生而言,了解报名考试费用是备考过程中不可或缺的一环。 CISP的报名考试费用主要包括培训费用、考试费用、…...
css 关于flex布局中子元素的属性flex
css flex布局中子元素的属性flex 1. flex 是 flex-grow、flex-shrink 和 flex-basis 的简写 语法格式: flex: [flex-grow] [flex-shrink] [flex-basis];各属性解析: flex-grow: 子元素如何按比例分配父元素的 剩余空间。 默认值:0&#…...
功率器件热设计基础(四)——功率半导体芯片温度和测试方法
/ 前言 / 功率半导体热设计是实现IGBT、碳化硅SiC高功率密度的基础,只有掌握功率半导体的热设计基础知识,才能完成精确热设计,提高功率器件的利用率,降低系统成本,并保证系统的可靠性。 功率器件热设计基础系列文章会…...
OpenStack系列第四篇:云平台基础功能与操作(Dashboard)
文章目录 1. 镜像(Image)添加镜像查看镜像删除镜像 2. 卷(Volume)创建卷查看卷删除卷 3. 网络(虚拟网络)创建网络查看网络删除网络 4. 实例类型创建实例类型查看实例类型删除实例类型 4. 密钥对(…...
WebSocket封装
提示:记录工作中遇到的需求及解决办法 文章目录 前言二、背景三、WebSocket3.1 什么是 WebSocket ?为什么使用他?四、封装 WebSocket4.1 Javascript 版本4.2 Typescript 版本4.3 如何使用?五、我的痛点如何处理前言 本文将介绍 WebSocket 的封装,比如:心跳机制,重连和一…...
面试题解,JVM的运行时数据区
一、请简述JVM运行时数据区的组成结构及各部分作用 总览 从线程持有的权限来看 线程私有区 虚拟机栈 虚拟机栈是一个栈结构,由许多个栈帧组成,一个方法分配一个栈帧,线程每执行一个方法时都会有一个栈帧入栈,方法执行结束后栈帧…...