大语言模型常用微调与基于SFT微调DeepSeek R1指南
概述
大型语言模型(LLM,Large Language Model)的微调(Fine-tuning)是指在一个预训练模型的基础上,使用特定领域或任务的数据对模型进行进一步训练,以使其在该领域或任务上表现更好。微调是迁移学习的一种常见方法,能够显著提升模型在特定任务上的性能。在大型语言模型(LLM)的微调中,有几种常见的方法,包括 SFT(监督微调)、LoRA(低秩适应)、P-tuning v2 和 **Freeze
1.大语言模型微调
1.1 微调的工作原理
微调(Fine-tuning)是指在预训练模型的基础上,使用特定任务的标注数据对模型进行进一步训练,使其在该任务上表现更好。微调的核心思想是利用预训练模型已经学习到的通用语言表示,通过少量任务数据调整模型参数,使其适应特定任务。
微调的关键组件
-
输入 (X):
- 提供给模型的文本数据(例如,电影评论、问题、对话等)。
- 对于文本生成任务,输入可能是一个问题或提示。
-
目标 (Y):
- 基于标注数据的预期输出(例如,情绪标签、聊天机器人响应、摘要文本等)。
- 对于分类任务,目标可能是类别标签(如“积极”或“消极”)。
- 对于生成任务,目标可能是完整的文本响应。
-
损失函数:
- 衡量模型的预测与目标之间的差异。
- 通过优化损失函数,模型逐渐调整参数以更好地拟合任务数据。
示例:IMDB 情绪分类
- 输入 (X):电影评论,例如“这部电影的视觉效果很棒,但情节很弱。”
- 目标 (Y):情绪标签,例如“积极”或“消极”。
- 模型任务:根据输入文本预测正确的情绪标签。
示例:文本生成
- 输入 (X):问题,例如“什么是人工智能?”
- 目标 (Y):生成的响应,例如“人工智能是模拟人类智能的技术。”
- 模型任务:根据输入问题生成正确的文本响应。
1.2 使用的损失函数:交叉熵损失
在语言模型的微调中,交叉熵损失(Cross-Entropy Loss) 是最常用的损失函数。它用于衡量模型预测的概率分布与真实目标分布之间的差异。
交叉熵损失的公式
对于语言模型,交叉熵损失的公式为:
Cross-Entropy Loss = − ∑ i = 1 N y i log ( p i ) \text{Cross-Entropy Loss} = -\sum_{i=1}^{N} y_i \log(p_i) Cross-Entropy Loss=−i=1∑Nyilog(pi)
其中:
- y i y_i yi:目标分布(真实标签的 one-hot 编码)。
- p i p_i pi:模型预测的概率分布。
- N N N:词汇表的大小(对于分类任务,( N ) 是类别数)。
交叉熵损失的作用
- 衡量预测与目标的差异:
- 当模型预测的概率分布与目标分布越接近时,交叉熵损失越小。
- 当模型预测的概率分布与目标分布差异较大时,交叉熵损失越大。
- 优化目标:
- 在训练过程中,通过反向传播和梯度下降,模型不断调整参数以最小化交叉熵损失。
示例:文本生成中的交叉熵损失
假设模型生成一个句子,每个词的概率分布如下:
- 目标词:
["I", "love", "AI"] - 模型预测的概率分布:
I: 0.9love: 0.8AI: 0.7
交叉熵损失计算如下:
t e x t L o s s = − ( log ( 0.9 ) + log ( 0.8 ) + log ( 0.7 ) ) text{Loss} = -(\log(0.9) + \log(0.8) + \log(0.7)) textLoss=−(log(0.9)+log(0.8)+log(0.7))
通过最小化损失,模型逐渐学会生成更准确的文本。
1.3 SFT(监督微调,Supervised Fine-Tuning)
SFT 是最常见的微调方法,通过在特定任务的标注数据上对预训练模型进行全参数微调。
特点
- 全参数微调:更新模型的所有参数。
- 适合场景:任务数据量较大,计算资源充足。
- 优点:模型可以完全适应任务。
- 缺点:计算成本高,显存占用大。
实现代码
from transformers import AutoTokenizer, AutoModelForSequenceClassification, Trainer, TrainingArguments
from datasets import load_dataset# 加载预训练模型和分词器
model_name = "bert-base-uncased"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(model_name, num_labels=2)# 加载数据集
dataset = load_dataset("imdb")# 数据预处理
def preprocess_function(examples):return tokenizer(examples["text"], truncation=True, padding="max_length", max_length=512)tokenized_datasets = dataset.map(preprocess_function, batched=True)# 设置训练参数
training_args = TrainingArguments(output_dir="./sft_results",evaluation_strategy="epoch",learning_rate=2e-5,per_device_train_batch_size=8,per_device_eval_batch_size=8,num_train_epochs=3,weight_decay=0.01,save_strategy="epoch",logging_dir="./logs",
)# 定义 Trainer
trainer = Trainer(model=model,args=training_args,train_dataset=tokenized_datasets["train"],eval_dataset=tokenized_datasets["test"],tokenizer=tokenizer,
)# 开始微调
trainer.train()# 保存模型
model.save_pretrained("./sft-fine-tuned-model")
tokenizer.save_pretrained("./sft-fine-tuned-model")
1.4 LoRA(低秩适应,Low-Rank Adaptation)
LoRA 是一种高效的微调方法,通过低秩分解的方式微调模型参数,减少计算量和显存占用。
特点
- 低秩分解:只微调模型的一部分参数(低秩矩阵)。
- 适合场景:资源有限,但仍需高效微调。
- 优点:参数效率高,显存占用低。
- 缺点:需要额外的实现支持。
实现代码
使用 peft 库实现 LoRA:
pip install peft
from transformers import AutoTokenizer, AutoModelForSequenceClassification
from peft import get_peft_model, LoraConfig, TaskType
from datasets import load_dataset# 加载预训练模型和分词器
model_name = "bert-base-uncased"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(model_name, num_labels=2)# 配置 LoRA
lora_config = LoraConfig(task_type=TaskType.SEQ_CLS, # 任务类型r=8, # 低秩矩阵的秩lora_alpha=32, # 缩放因子lora_dropout=0.1, # Dropout 概率
)# 应用 LoRA
model = get_peft_model(model, lora_config)# 加载数据集
dataset = load_dataset("imdb")# 数据预处理
def preprocess_function(examples):return tokenizer(examples["text"], truncation=True, padding="max_length", max_length=512)tokenized_datasets = dataset.map(preprocess_function, batched=True)# 设置训练参数
training_args = TrainingArguments(output_dir="./lora_results",evaluation_strategy="epoch",learning_rate=2e-5,per_device_train_batch_size=8,per_device_eval_batch_size=8,num_train_epochs=3,weight_decay=0.01,save_strategy="epoch",logging_dir="./logs",
)# 定义 Trainer
trainer = Trainer(model=model,args=training_args,train_dataset=tokenized_datasets["train"],eval_dataset=tokenized_datasets["test"],tokenizer=tokenizer,
)# 开始微调
trainer.train()# 保存模型
model.save_pretrained("./lora-fine-tuned-model")
1.5 P-tuning v2
P-tuning v2 是一种提示微调方法,通过优化提示(Prompt)来引导模型完成任务,而不改变模型参数。
特点
- 提示优化:通过可学习的提示向量引导模型。
- 适合场景:少样本学习,资源有限。
- 优点:无需修改模型参数,显存占用低。
- 缺点:需要设计提示模板。
实现代码
使用 openprompt 库实现 P-tuning v2:
pip install openprompt
from openprompt import PromptDataLoader, PromptForClassification
from openprompt.plms import load_plm
from openprompt.prompts import ManualTemplate
from openprompt.prompts import ManualVerbalizer
from datasets import load_dataset# 加载预训练模型
plm, tokenizer, model_config, WrapperClass = load_plm("bert", "bert-base-uncased")# 加载数据集
dataset = load_dataset("imdb")# 定义提示模板
template = ManualTemplate(text='{"placeholder":"text_a"} It was {"mask"}',tokenizer=tokenizer,
)# 定义标签词映射
verbalizer = ManualVerbalizer(classes=["negative", "positive"],label_words={"negative": ["bad"],"positive": ["good"],},tokenizer=tokenizer,
)# 定义 Prompt 模型
prompt_model = PromptForClassification(plm=plm,template=template,verbalizer=verbalizer,
)# 数据加载器
dataloader = PromptDataLoader(dataset=dataset["train"],tokenizer=tokenizer,template=template,max_seq_length=512,
)# 训练(伪代码,需补充优化器和训练循环)
for batch in dataloader:logits = prompt_model(batch)# 计算损失并更新模型
1.6 Freeze 微调
Freeze 微调是指冻结模型的大部分参数,只微调部分层(如分类头)。
特点
- 参数冻结:只微调模型的最后几层。
- 适合场景:资源有限,任务数据量较小。
- 优点:计算成本低,显存占用少。
- 缺点:模型适应能力有限。
实现代码
from transformers import AutoTokenizer, AutoModelForSequenceClassification, Trainer, TrainingArguments
from datasets import load_dataset# 加载预训练模型和分词器
model_name = "bert-base-uncased"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(model_name, num_labels=2)# 冻结模型的大部分参数
for param in model.bert.parameters():param.requires_grad = False# 加载数据集
dataset = load_dataset("imdb")# 数据预处理
def preprocess_function(examples):return tokenizer(examples["text"], truncation=True, padding="max_length", max_length=512)tokenized_datasets = dataset.map(preprocess_function, batched=True)# 设置训练参数
training_args = TrainingArguments(output_dir="./freeze_results",evaluation_strategy="epoch",learning_rate=2e-5,per_device_train_batch_size=8,per_device_eval_batch_size=8,num_train_epochs=3,weight_decay=0.01,save_strategy="epoch",logging_dir="./logs",
)# 定义 Trainer
trainer = Trainer(model=model,args=training_args,train_dataset=tokenized_datasets["train"],eval_dataset=tokenized_datasets["test"],tokenizer=tokenizer,
)# 开始微调
trainer.train()# 保存模型
model.save_pretrained("./freeze-fine-tuned-model")
tokenizer.save_pretrained("./freeze-fine-tuned-model")
1.7 总结
| 方法 | 特点 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|---|
| SFT | 全参数微调 | 数据量大,资源充足 | 完全适应任务 | 计算成本高 |
| LoRA | 低秩分解,部分参数微调 | 资源有限 | 参数效率高,显存占用低 | 需要额外实现 |
| P-tuning | 提示优化,不修改模型参数 | 少样本学习 | 显存占用低 | 需要设计提示模板 |
| Freeze | 冻结大部分参数,微调部分层 | 资源有限,数据量小 | 计算成本低 | 模型适应能力有限 |
2.DeepSeek微调
DeepSeek LLM 是一个强大的开源语言模型,但为了最大限度地发挥其在特定应用中的潜力,微调是必不可少的。

2.1 使用数据子集
在资源有限的硬件上微调像 DeepSeek LLM 这样的大型语言模型时,在完整数据集(例如,具有 25,000 个样本的 IMDB)上进行训练可能会导致过多的训练时间和 GPU 内存问题。
- 选择一个子集:500 个样本用于训练,100 个样本用于评估。
- 保持代表性:该子集保留了足够的多样性以实现合理的性能。
使用较小的数据集可以加快实验速度,同时有效地展示微调概念。对于生产级微调,应在更强大的基础设施上使用更大的数据集。
2.2 安装所需的库
首先,安装必要的依赖项:
pip install -U torch transformers datasets accelerate peft bitsandbytes
2.3 使用 4 位量化加载模型
使用 4 位量化使大型模型与有限的 GPU 内存兼容:
from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig
from peft import LoraConfig, get_peft_modelmodel_name = "deepseek-ai/deepseek-llm-7b-base"
# Configure 4-bit quantization
bnb_config = BitsAndBytesConfig(load_in_4bit=True,bnb_4bit_compute_dtype=torch.float16 # Use float16 for faster computation
)
# Load tokenizer and model
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name, quantization_config=bnb_config, device_map="auto"
)
# Apply LoRA for memory-efficient fine-tuning
lora_config = LoraConfig(r=8, # Low-rank adaptation sizelora_alpha=32,target_modules=["q_proj", "v_proj"], # Apply LoRA to attention layerslora_dropout=0.05,bias="none"
)
model = get_peft_model(model, lora_config)
model.print_trainable_parameters()
print(" DeepSeek LLM Loaded with LoRA and 4-bit Precision!")
2.4 使用 Hugging Face 数据集进行训练
为了进行微调,需要一个高质量的数据集。 Hugging Face 提供对各种数据集的访问:
选择数据集
对于此示例,让我们使用 IMDB 数据集对 DeepSeek LLM 进行情绪分类微调:
from datasets import load_dataset# Load dataset
dataset = load_dataset("imdb")
预处理数据集
将文本转换为模型的标记化输入:
def tokenize_function(examples):inputs = tokenizer(examples["text"], truncation=True, padding="max_length", max_length=512)inputs["labels"] = inputs["input_ids"].copy()return inputstokenized_datasets = dataset.map(tokenize_function, batched=True)
# Subset the dataset for faster experimentation
small_train_dataset = tokenized_datasets["train"].shuffle(seed=42).select(range(500))
small_test_dataset = tokenized_datasets["test"].shuffle(seed=42).select(range(100))
# Print a sample tokenized entry
print("Tokenized Sample:")
print(small_train_dataset[0])
3.LoRA(低秩自适应)
LoRA(低秩自适应)是一种旨在通过以下方式使 DeepSeek LLM 等大型模型的微调更加节省内存的技术:
- 冻结模型的大部分权重。
- 在关键层(例如注意层)中引入低秩可训练矩阵。
这大大减少了可训练参数的数量,同时保持了模型的性能。LoRA 可以在资源受限的硬件(例如 Colab GPU)上微调大型语言模型。
#4.代码演练:微调 DeepSeek LLM
首先设置训练参数:
from transformers import TrainingArguments, Trainertraining_args = TrainingArguments(output_dir="./results",evaluation_strategy="epoch",learning_rate=3e-4, # Lower learning rate for LoRA fine-tuningper_device_train_batch_size=1, # Reduce batch size for memory efficiencygradient_accumulation_steps=8, # Simulate larger batch sizenum_train_epochs=0.5,weight_decay=0.01,save_strategy="epoch",logging_dir="./logs",logging_steps=50,fp16=True, # Mixed precision training
)
初始化训练器:
trainer = Trainer(model=model,args=training_args,train_dataset=small_train_dataset,eval_dataset=small_test_dataset,
)
print("🚀 Trainer Initialized!")
开始微调:
print("🚀 Starting Fine-Tuning...")
trainer.train()
保存微调模型:
trainer.save_model("./fine_tuned_deepseek")
tokenizer.save_pretrained("./fine_tuned_deepseek")
print("Fine-Tuned Model Saved Successfully!")
相关文章:
大语言模型常用微调与基于SFT微调DeepSeek R1指南
概述 大型语言模型(LLM,Large Language Model)的微调(Fine-tuning)是指在一个预训练模型的基础上,使用特定领域或任务的数据对模型进行进一步训练,以使其在该领域或任务上表现更好。微调是迁移…...
LabVIEW的吞雨测控系统
本案例介绍了一种基于LabVIEW开发的吞雨测控系统,该系统通过建模仿真分析不同控制器模式下的阶跃信号响应,从而选择了最适合的控制器。为了有效解决在控制流量过程中出现的振荡收敛和流量信号大扰动问题,系统采用了改进的积分分离PID算法&…...
redis基础命令
基于内存的数据存储系统 redis中数据以键值对存储的 键区分大小写 redis默认都是使用字符串存储数据 //启动服务 redis-server //连接客户端 redis-cli //连接客户端,--raw表示以原始的形式显示内容 redis-cli --rawset keyname valueget keynamedel keyname //…...
基于Java+SpringBoot+Vue的前后端分离的校园闲置物品交易网站
基于JavaSpringBootVue的前后端分离的校园闲置物品交易网站 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末附源码下载链接…...
K8s 证书认知(K8s Certificate Awareness)
K8s 证书认知 在谈起 Kubernetes 证书时,总感觉其涵盖的内容繁多,仿佛千头万绪,让人不知该从何处着手阐述。为了更好地理清思路,本文将对相关内容进行系统的梳理和记录。 1、证书及链路关系 Kubeadm部署的集群,K8s …...
前x-ai首席科学家karpathy的从零构建ChatGPT视频学习笔记--8000字长图文笔记预警(手打纯干货,通俗易懂)
2025.2.17晚上21:57看完了整个视频,作为一个ai专业的学生虽然每天都在用ai,但是对于其背后的原理却不是那么清楚,而卡帕西的这支视频却让我醍醐灌顶,而且全程听起来很舒服,没有知识强行进入脑子的痛感,在他…...
【智慧校园】分体空调节能监管:打造高效节能的学习环境
随着科技的飞速发展和生活品质的不断提升,人们对于家居和办公环境的舒适度与智能化要求也越来越高。分体空调集中控制系统作为一种先进的空调管理方式,正逐渐成为现代家庭和办公场所的标配,为用户带来更加便捷、高效和节能的空调使用体验。随…...
深度学习-1.简介
Deep Learning - Lecture 1 Introduction to Deep Learning 学习深度学习的动机什么是深度学习什么导致了深度学习的出现模型与理论的发展(软件部分)通用图形处理单元GPU的发展(硬件部分)CPU与GPU计算对比 GPU与CPU的理论FLOPS对…...
【Rust中级教程】1.10. 引用及内部可变性(简单回顾):引用、内部可变性、`Cell`类型及相关操作
喜欢的话别忘了点赞、收藏加关注哦(加关注即可阅读全文),对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 这篇文章只对所有权进行简单回顾,想要看完整的所有权系统阐述见【Rust自学】专栏…...
Docker 安装和配置 Nginx 详细图文教程
🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall ︱vue3-element-admin︱youlai-boot︱vue-uniapp-template 🌺 仓库主页: GitCode︱ Gitee ︱ Github 💖 欢迎点赞 👍 收藏 ⭐评论 …...
基于Java+Swing+Mysql实现旅游管理信息系统
基于JavaSwingMysql实现旅游管理信息系统 一、系统介绍二、功能展示1.登陆2.注册3.旅游信息查询4.查看游行团信息5.报名6、报名信息管理 三、数据库四、其它1.其他系统实现五.获取源码 一、系统介绍 用户:登陆、注册、旅游信息查询、查看游行团信息、报名 管理员&a…...
使用 Openpyxl 操作 Excel 文件详解
文章目录 安装安装Python3安装 openpyxl 基础操作1. 引入2. 创建工作簿和工作表3. 写入数据4. 保存工作簿5. 加载已存在的Excel6. 读取单元格的值7. 选择工作表 样式和格式化1. 引入2. 设置字体3. 设置边框4. 填充5. 设置数字格式6. 数据验证7. 公式操作 性能优化1. read_only/…...
统信服务器操作系统V20 1070A 安装docker新版本26.1.4
应用场景: 硬件/整机信息:x86平台、深信服超融合平台 OS版本信息:统信V20 1070a 1.获取docker二进制包 链接: https://pan.baidu.com/s/1SukBlra0mQxvslTfFakzGw?pwd5s5y 提取码: 5s5y tar xvf docker-26.1.4.tgz groupadd docker ch…...
【数据分享】1929-2024年全球站点的逐年降雪深度数据(Shp\Excel\免费获取)
气象数据是在各项研究中都经常使用的数据,气象指标包括气温、风速、降水、能见度等指标,说到气象数据,最详细的气象数据是具体到气象监测站点的数据! 有关气象指标的监测站点数据,之前我们分享过1929-2024年全球气象站…...
python爬虫系列课程1:初识爬虫
python爬虫系列课程1:初识爬虫 一、爬虫的概念二、通用爬虫和自定义爬虫的区别三、开发语言四、爬虫流程一、爬虫的概念 网络爬虫(又被称为网页蜘蛛、网络机器人)就是模拟浏览器发送网络请求,接收请求响应,一种按照一定的规则,自动抓取互联网信息的程序。原则上,只要是…...
大模型工具大比拼:SGLang、Ollama、VLLM、LLaMA.cpp 如何选择?
简介:在人工智能飞速发展的今天,大模型已经成为推动技术革新的核心力量。无论是智能客服、内容创作,还是科研辅助、代码生成,大模型的身影无处不在。然而,面对市场上琳琅满目的工具,如何挑选最适合自己的那…...
什么是语料清洗、预训练、指令微调、强化学习、内容安全; 什么是megatron,deepspeed,vllm推理加速框架
什么是语料清洗、预训练、指令微调、强化学习、内容安全 目录 什么是语料清洗、预训练、指令微调、强化学习、内容安全语料清洗预训练指令微调强化学习内容安全什么是megatron,deepspeed,vllm推理加速框架语料清洗 语料清洗是对原始文本数据进行处理的过程,旨在去除数据中的…...
HTTP的“对话”逻辑:请求与响应如何构建数据桥梁?
一、前言 作为现代互联网通信的基石,HTTP协议定义了客户端与服务器之间的“对话规则”。每一次网页加载、API调用或文件传输的背后,都离不开精心构造的HTTP请求与响应。请求中封装了用户的意图——从请求方法、资源路径到提交的数据;响应则承…...
【深度学习】预训练和微调概述
预训练和微调概述 1. 预训练和微调的介绍1.1 预训练(Pretraining)1.2 微调(Fine-Tuning) 2. 预训练和微调的区别 预训练和微调是现代深度学习模型训练中的两个关键步骤,它们通常是一个 预训练-微调 (Pretrain-Finetune…...
自动化测试框架搭建-单次接口执行-三部曲
目的 判断接口返回值和提前设置的预期是否一致,从而判断本次测试是否通过 代码步骤设计 第一步:前端调用后端已经写好的POST接口,并传递参数 第二步:后端接收到参数,组装并请求指定接口,保存返回 第三…...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...
大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...
深入理解JavaScript设计模式之单例模式
目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...
【2025年】解决Burpsuite抓不到https包的问题
环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...
Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...
GC1808高性能24位立体声音频ADC芯片解析
1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
