Vllm-v0.11.0模型微调指南:低成本体验完整训练流程

Vllm-v0.11.0模型微调指南:低成本体验完整训练流程

你是不是也遇到过这种情况:手头有个不错的小样本数据集,想试试对大模型做微调验证想法,但公司GPU资源紧张,排队等一周都轮不到?或者自己本地显卡太小,跑不动主流模型,连最基础的实验都做不了?

别急,今天这篇文章就是为你量身打造的。我会带你用vLLM v0.11.0镜像,在一个临时、低成本、快速启动的环境中,完成一次完整的模型微调全流程。整个过程不需要复杂的集群配置,也不用等审批排期,从部署到出结果,最快20分钟就能跑通

我们聚焦的是“可行性验证”——也就是在正式投入大量资源前,先用最小成本确认你的微调思路是否值得继续推进。这特别适合数据科学家、算法工程师或研究者在项目初期快速试错。

文章基于 CSDN 星图平台提供的vLLM v0.11.0 预置镜像,它已经集成了 PyTorch、CUDA、Hugging Face Transformers 和 vLLM 核心组件,支持一键部署 + 外部服务暴露,省去你90%的环境搭建时间。

接下来,我会手把手教你:

  • 如何快速启动一个带 GPU 的 vLLM 环境
  • 怎么准备小样本数据并格式化为微调可用的形式
  • 使用 LoRA 技术进行轻量级微调的具体操作步骤
  • 微调后如何加载模型并测试效果
  • 常见问题和参数调优建议

学完这篇,你不仅能跑通一次完整的微调实验,还能掌握一套可复用的工作流,以后每次有新想法都能快速验证。现在就开始吧!

1. 环境准备:一键部署vLLM开发环境

1.1 为什么选择vLLM v0.11.0镜像做微调?

说到模型微调,很多人第一反应是用 Hugging Face Transformers + DeepSpeed 或者 Accelerate。这些工具确实强大,但它们更适合大规模训练任务,对于只想快速验证想法的小样本场景来说,显得有点“杀鸡用牛刀”。

而 vLLM 虽然以推理性能优化著称(比如 PagedAttention 技术大幅降低 KV Cache 占用),但从 v0.8 版本开始,它就逐步增强了对训练的支持,尤其是与 LoRA 结合后,完全可以胜任轻量级微调任务。

vLLM v0.11.0 这个镜像的优势在于:

  • 开箱即用:预装了 CUDA 12.1、PyTorch 2.1、Transformers 4.36、PEFT、bitsandbytes 等全套依赖,不用再折腾 pip 安装失败的问题。
  • GPU 利用率高:vLLM 内部的内存管理机制能让小显存也能跑较大模型,比如 24GB 显存可以轻松运行 Llama-3-8B-Instruct 的 LoRA 微调。
  • 支持 LoRA 训练:虽然主打推理,但 vLLM 可以无缝对接 Hugging Face 的 Trainer API,结合 PEFT 库实现高效参数微调。
  • 服务化能力强:微调完成后可以直接通过vLLM启动 API 服务,方便后续集成测试。

所以,如果你的目标不是训练一个全新模型,而是想用少量数据调整现有模型的行为(比如让模型更懂某个专业领域术语),那么 vLLM + LoRA 是一条又快又省的路径。

⚠️ 注意
vLLM 本身不提供完整的训练循环,我们需要借助 Hugging Face 的Trainer类来完成训练逻辑。但得益于其高效的底层实现,即使是微调阶段也能享受到更好的显存利用率和计算效率。

1.2 在CSDN星图平台快速创建实例

现在我们就来实际操作,把环境搭起来。

第一步:登录 CSDN 星图平台,进入“镜像广场”,搜索关键词 “vLLM” 或直接查找 “vLLM v0.11.0” 镜像。

第二步:选择带有 GPU 支持的实例类型。推荐至少使用1张 A10G 或更好规格的GPU,显存不低于24GB。如果是尝试更小的模型(如 Mistral-7B),也可以用 T4(16GB)勉强运行,但会限制 batch size。

第三步:配置实例参数:

  • 实例名称:比如vllm-lora-finetune-test
  • 系统盘:建议选50GB以上SSD
  • 数据盘:如果数据量大或需要长期保存模型,可挂载额外存储
  • 是否开放公网IP:勾选,便于后续远程连接和API调用

第四步:点击“立即创建”,等待3~5分钟,系统会自动完成镜像拉取和环境初始化。

第五步:实例创建成功后,点击“SSH登录”或使用本地终端连接:

ssh root@你的公网IP -p 22

首次登录会提示修改密码,请设置一个强密码并妥善保管。

连接成功后,你可以执行以下命令检查关键组件是否就位:

# 查看Python环境 python --version # 检查CUDA和nvidia驱动 nvidia-smi # 查看vLLM版本 pip show vllm # 查看transformers和peft pip show transformers peft

正常情况下你会看到:

  • Python 3.10+
  • CUDA 12.1
  • vLLM 0.11.0
  • transformers >= 4.36
  • peft >= 0.8.0

这些版本组合经过官方测试,兼容性良好,基本不会出现依赖冲突。

💡 提示
如果你习惯用 Jupyter Lab 做交互式开发,这个镜像也预装了 Jupyter,只需运行:

jupyter lab --ip=0.0.0.0 --port=8888 --allow-root --no-browser

然后在浏览器访问http://你的IP:8888即可进入 Notebook 界面。

1.3 初始化项目目录结构

为了保持整洁,我们先建立一个标准的项目目录结构:

mkdir -p ~/lora-finetune/{data,models,scripts,outputs} cd ~/lora-finetune

各文件夹用途如下:

  • data/:存放原始数据和处理后的训练集
  • models/:下载的基础模型权重(如 Llama-3-8B-Instruct)
  • scripts/:存放训练脚本和推理代码
  • outputs/:保存微调后的 LoRA 权重和日志

接下来我们可以开始准备数据了。

2. 数据准备与预处理:让小样本也能发挥作用

2.1 小样本微调的数据要求与获取方式

既然是“低成本验证”,那我们就不能指望有上万条标注数据。实际上,很多成功的微调案例只用了几十到几百条高质量样本就达到了不错的效果。

关键在于:数据质量 > 数据数量

举个例子,假设你想让模型学会写法律文书摘要。与其收集一万个普通文本段落,不如精心整理50个真实的法院判决书摘要对(原文 → 摘要),并确保每一条都准确无误。

这类小样本数据可以从以下几个渠道获取:

  • 公司内部已有文档(脱敏后使用)
  • 公开数据集中筛选相关子集(如 Alpaca、Dolly、OpenAssistant)
  • 手工构造典型样例(适用于规则明确的任务)
  • 使用合成数据生成器辅助扩充(如用 GPT 自动生成问答对)

这里推荐一个小技巧:先用5条数据跑通全流程,确认没有技术障碍后再扩展到更多样本。这样能避免花几小时训练才发现数据格式错了。

今天我们以一个简单的“风格迁移”任务为例:让模型学会将普通口语化句子转为正式书面语。比如:

  • 输入:“这东西挺好的,我觉得可以买”
  • 输出:“该产品品质优良,建议采购”

我们准备了80条这样的配对数据,保存为 JSONL 格式(每行一个 JSON 对象)。

2.2 数据格式转换与Tokenizer适配

vLLM 和 Hugging Face 模型都需要将文本转换成 token ID 序列才能处理。所以我们得先把原始数据变成模型能吃的“饲料”。

首先,安装必要的库(虽然镜像里大概率已经有了):

pip install datasets accelerate sentencepiece

然后编写一个简单的数据处理脚本scripts/preprocess.py

import json from transformers import AutoTokenizer # 加载 tokenizer model_path = "/root/lora-finetune/models/Llama-3-8B-Instruct" tokenizer = AutoTokenizer.from_pretrained(model_path, use_fast=True) # 读取原始数据 with open("data/raw_pairs.jsonl", "r", encoding="utf-8") as f: lines = f.readlines() # 存储处理后的样本 processed_data = [] for line in lines: item = json.loads(line) instruction = item["input"] response = item["output"] # 构造 prompt 模板(适配 Llama-3 格式) prompt = f"<|begin_of_text|><|start_header_id|>user<|end_header_id|>\n\n{instruction}<|eot_id|><|start_header_id|>assistant<|end_header_id|>\n\n{response}<|eot_id|>" # 编码 encoded = tokenizer( prompt, truncation=True, max_length=512, # 根据显存调整 padding=False, # 动态batching时由dataloader处理 return_tensors=None ) processed_data.append({ "input_ids": encoded["input_ids"], "attention_mask": encoded["attention_mask"], "labels": encoded["input_ids"].copy() # labels通常与input_ids一致,loss只计算answer部分 }) # 保存为jsonl用于训练 with open("data/train_processed.jsonl", "w", encoding="utf-8") as f: for item in processed_data: f.write(json.dumps(item, ensure_ascii=False) + "\n") print(f"✅ 成功处理 {len(processed_data)} 条数据")

几点说明:

  • 我们使用了 Llama-3 官方推荐的 chat template,包含特殊的 control token(如<|eot_id|>),必须严格匹配。
  • max_length=512是为了控制显存占用,如果你的 GPU 显存充足,可以提高到 1024。
  • labels字段复制了input_ids,因为在训练时我们会通过 loss masking 只计算 assistant 回应部分的损失。

运行这个脚本前,记得先放一份原始数据在data/raw_pairs.jsonl

{"input": "这东西挺好的,我觉得可以买", "output": "该产品品质优良,建议采购"} {"input": "明天开会别迟到", "output": "请准时参加明日会议"} ...

执行:

python scripts/preprocess.py

如果一切顺利,你会在data/目录下看到train_processed.jsonl文件。

2.3 数据集划分与加载器构建

虽然只有80条数据,我们还是按 7:3 分成训练集和验证集,以便观察过拟合情况。

继续在脚本中添加:

from sklearn.model_selection import train_test_split # 读取已编码的数据 with open("data/train_processed.jsonl", "r") as f: all_data = [json.loads(line) for line in f] train_data, eval_data = train_test_split(all_data, test_size=0.3, random_state=42) # 保存 def save_dataset(data, filename): with open(filename, "w") as f: for item in data: f.write(json.dumps(item) + "\n") save_dataset(train_data, "data/train.jsonl") save_dataset(eval_data, "data/eval.jsonl") print(f"📊 训练集大小: {len(train_data)}, 验证集大小: {len(eval_data)}")

最后一步是构建 PyTorch Dataset 类,供 Trainer 使用:

import torch from torch.utils.data import Dataset class SFTDataset(Dataset): def __init__(self, data_file): with open(data_file, 'r') as f: self.data = [json.loads(line) for line in f] def __len__(self): return len(self.data) def __getitem__(self, idx): item = self.data[idx] return { "input_ids": torch.LongTensor(item["input_ids"]), "attention_mask": torch.LongTensor(item["attention_mask"]), "labels": torch.LongTensor(item["labels"]) } # 测试加载 train_set = SFTDataset("data/train.jsonl") print(train_set[0])

至此,数据准备工作全部完成。下一步就是最关键的微调环节了。

3. 模型微调实战:用LoRA实现高效参数更新

3.1 LoRA原理简述:为什么它适合小样本任务

你可能听说过全参数微调(Full Fine-tuning),也就是把整个模型的所有权重都更新一遍。这种方法效果最好,但代价极高——动辄需要上百GB显存和数天训练时间。

而 LoRA(Low-Rank Adaptation)是一种参数高效微调(Parameter-Efficient Fine-Tuning, PEFT)方法,它的核心思想是:

不直接修改原始模型权重,而是在某些层旁边“挂接”两个小矩阵(A 和 B),训练时只更新这两个小矩阵,推理时再把它们合并回原模型。

打个比方,就像给一辆车加装一套可拆卸的越野套件,而不是重新造一辆新车。当你需要越野时装上,平时就拆下来,既省钱又灵活。

具体到技术层面:

  • 原始权重矩阵 W 是一个大矩阵(比如 4096x4096)
  • LoRA 引入两个小矩阵:A(4096xr)和 B(rx4096),其中 r 是秩(rank),通常设为 8、16、32
  • 实际输出变为:Output = W @ x + α * (B @ A @ x),α 是缩放系数
  • 训练时只更新 A 和 B,W 保持冻结

好处非常明显:

  • 显存节省:只训练少量参数,显存占用下降80%以上
  • 训练速度快:梯度计算量小,迭代更快
  • 模型轻量化:最终保存的只是 LoRA 权重(几MB到几十MB),便于管理和部署

对于我们这种临时验证场景,LoRA 简直是完美选择。

3.2 配置LoRA参数与训练超参

现在我们来写训练脚本scripts/train_lora.py

首先导入所需库:

import os os.environ["TOKENIZERS_PARALLELISM"] = "false" import torch from transformers import ( AutoModelForCausalLM, TrainingArguments, Trainer, DataCollatorForLanguageModeling ) from peft import LoraConfig, get_peft_model

加载基础模型:

model_name = "/root/lora-finetune/models/Llama-3-8B-Instruct" model = AutoModelForCausalLM.from_pretrained( model_name, torch_dtype=torch.bfloat16, # 节省显存且精度足够 device_map="auto", # 自动分配GPU trust_remote_code=True )

配置 LoRA:

lora_config = LoraConfig( r=64, # rank,越大能力越强,也越耗显存 lora_alpha=16, # alpha scaling factor target_modules=["q_proj", "k_proj", "v_proj", "o_proj"], # 仅对注意力层做LoRA lora_dropout=0.1, # dropout防止过拟合 bias="none", # 不训练bias项 task_type="CAUSAL_LM" # 用于语言建模 ) # 将LoRA注入模型 model = get_peft_model(model, lora_config) model.print_trainable_parameters() # 查看可训练参数比例

输出应该是类似:

trainable params: 15,728,640 || all params: 8,031,552,000 || trainable%: 0.1958

也就是说,我们只训练了0.2%的参数!这就是 LoRA 的威力。

接下来是训练参数设置:

training_args = TrainingArguments( output_dir="./outputs", num_train_epochs=3, # 小数据集一般1-3轮足够 per_device_train_batch_size=2, # 根据显存调整,A10G建议2-4 per_device_eval_batch_size=2, gradient_accumulation_steps=4, # 累积梯度模拟更大batch learning_rate=2e-4, # LoRA常用学习率 warmup_steps=50, weight_decay=0.01, logging_dir="./logs", logging_steps=10, save_steps=100, evaluation_strategy="steps", eval_steps=50, save_total_limit=2, load_best_model_at_end=True, metric_for_best_model="eval_loss", greater_is_better=False, fp16=False, # 已用bfloat16 bf16=True, remove_unused_columns=False, report_to=[], # 不上报wandb等 dataloader_num_workers=2, disable_tqdm=False )

重点参数解释:

  • per_device_train_batch_size=2:单卡每次处理2个样本
  • gradient_accumulation_steps=4:累积4步才更新一次权重,等效 batch size = 8
  • learning_rate=2e-4:LoRA 推荐范围是 1e-4 ~ 3e-4
  • r=64:比常见值(8-32)稍大,因为我们希望捕捉更多特征变化

3.3 开始训练并监控进度

最后组装 Trainer 并启动训练:

from datasets import load_dataset # 加载数据集 train_dataset = load_dataset('json', data_files='data/train.jsonl', split='train') eval_dataset = load_dataset('json', data_files='data/eval.jsonl', split='train') # 数据整理器(自动padding) data_collator = DataCollatorForLanguageModeling( tokenizer=tokenizer, mlm=False # causal LM用autoregressive方式 ) # 创建Trainer trainer = Trainer( model=model, args=training_args, train_dataset=train_dataset, eval_dataset=eval_dataset, data_collator=data_collator, tokenizer=tokenizer ) # 开始训练 print("🚀 开始微调...") trainer.train() # 保存最终模型 trainer.save_model("./outputs/final-lora") print("✅ 微调完成,模型已保存")

运行命令:

python scripts/train_lora.py

训练过程中你会看到类似输出:

Epoch 1/3: 100%|██████████| 40/40 [05:23<00:00, 8.08s/it] Step Loss Eval Loss 10 2.15 - 20 1.98 2.05 ...

由于数据量小,一轮训练大约5~10分钟(取决于GPU),三轮总共也就半小时左右。

⚠️ 注意
如果出现 OOM(Out of Memory)错误,可以尝试:

  • 降低per_device_train_batch_size到 1
  • 减小max_length到 256
  • 使用gradient_checkpointing=True(会变慢但省显存)

4. 效果验证与模型部署:从实验到可用服务

4.1 加载微调后模型进行推理测试

微调完成后,我们要验证模型是否真的学会了新技能。

新建一个推理脚本scripts/inference.py

from transformers import AutoTokenizer, AutoModelForCausalLM from peft import PeftModel, PeftConfig # 加载基础模型 base_model_path = "/root/lora-finetune/models/Llama-3-8B-Instruct" lora_path = "./outputs/final-lora" # 先加载基础模型 model = AutoModelForCausalLM.from_pretrained( base_model_path, torch_dtype=torch.bfloat16, device_map="auto" ) # 注入LoRA权重 model = PeftModel.from_pretrained(model, lora_path) # 合并权重(可选,提升推理速度) model = model.merge_and_unload() tokenizer = AutoTokenizer.from_pretrained(base_model_path) def generate_response(prompt): full_prompt = f"<|begin_of_text|><|start_header_id|>user<|end_header_id|>\n\n{prompt}<|eot_id|><|start_header_id|>assistant<|end_header_id|>\n\n" inputs = tokenizer(full_prompt, return_tensors="pt").to("cuda") outputs = model.generate( **inputs, max_new_tokens=128, temperature=0.7, top_p=0.9, do_sample=True, pad_token_id=tokenizer.eos_token_id ) response = tokenizer.decode(outputs[0][inputs['input_ids'].shape[1]:], skip_special_tokens=False) return response.strip() # 测试几个例子 test_inputs = [ "这个方案看起来不错,咱们可以试试", "别忘了交报告", "我觉得这个价格还可以谈" ] for inp in test_inputs: print(f"📌 输入: {inp}") print(f"🎯 输出: {generate_response(inp)}\n")

运行:

python scripts/inference.py

理想情况下你会看到输出变得更正式、更专业,说明微调生效了。

4.2 使用vLLM加速推理并对外提供API服务

虽然原生 Transformers 能跑通,但在生产环境下我们更希望用 vLLM 来获得更高的吞吐量。

幸运的是,vLLM v0.11.0 支持加载 Hugging Face 格式的模型,包括 LoRA 合并后的模型。

首先将合并后的模型保存为标准格式:

model.save_pretrained("./outputs/merged-model") tokenizer.save_pretrained("./outputs/merged-model")

然后使用 vLLM 启动 API 服务:

python -m vllm.entrypoints.openai.api_server \ --model /root/lora-finetune/outputs/merged-model \ --tensor-parallel-size 1 \ --dtype bfloat16 \ --gpu-memory-utilization 0.9

服务默认监听8000端口。你可以通过 curl 测试:

curl http://localhost:8000/v1/completions \ -H "Content-Type: application/json" \ -d '{ "model": "merged-model", "prompt": "这东西挺好,推荐买", "max_tokens": 128, "temperature": 0.7 }'

响应会返回标准化的 OpenAI 兼容格式,方便前端或其他服务调用。

💡 提示
如果你想让外部网络访问,记得在平台安全组开放 8000 端口,并可通过 Nginx 做反向代理。

4.3 常见问题与优化建议

在实际使用中,你可能会遇到一些典型问题,这里列出解决方案:

Q1:训练时 loss 下降但效果没提升?
可能是数据质量不高或 prompt 模板不匹配。建议人工检查前10条生成结果,确认模型是否理解任务意图。

Q2:显存不足怎么办?

  • 使用--gradient_checkpointing减少显存占用
  • 降低per_device_train_batch_size
  • 尝试更小的r值(如 32 或 16)
  • 使用 QLoRA(4-bit量化LoRA),需额外安装 bitsandbytes

Q3:如何判断是否过拟合?
观察训练 loss 和验证 loss 曲线。如果训练 loss 持续下降但验证 loss 开始上升,说明过拟合。此时应:

  • 增加 dropout(如 lora_dropout=0.2)
  • 减少训练轮数
  • 增加数据多样性

Q4:微调后推理速度变慢?
LoRA 本身不影响推理速度(合并后更是零开销)。但如果未合并,每次推理都要计算增量矩阵。建议验证完成后执行merge_and_unload()

优化建议总结:

  • 小样本任务优先用 LoRA,r=32~64 足够
  • 学习率建议 1e-4 ~ 3e-4,太高容易震荡
  • 至少保留 10% 数据做验证
  • 训练完成后务必合并 LoRA 权重以便部署

总结

  • vLLM v0.11.0 镜像极大简化了环境搭建,预装组件齐全,一键部署即可开始微调实验。
  • LoRA 技术让小样本微调变得可行且高效,仅需训练极小部分参数就能获得显著效果提升。
  • 完整流程可在20~30分钟内走通,非常适合在公司GPU排队期间快速验证想法。
  • 微调后可通过vLLM快速部署为API服务,实现从实验到应用的平滑过渡。
  • 实测在A10G GPU上运行稳定,资源消耗低,是数据科学家进行快速迭代的理想选择。

现在就可以试试用这套流程验证你的下一个模型优化想法了!


获取更多AI镜像

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1185889.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SGLang-v0.5.6优化建议:避免长文本导致OOM的策略

SGLang-v0.5.6优化建议&#xff1a;避免长文本导致OOM的策略 1. 背景与问题分析 1.1 SGLang 简介 SGLang&#xff08;Structured Generation Language&#xff09;是一个专为大语言模型推理优化设计的高性能框架&#xff0c;旨在解决大规模模型在生产环境中部署时面临的高延…

三菱FX3U系列PLC单轴伺服程序:设备实际批量应用、稳定可靠的经典案列

三菱PLC伺服单轴程序 程序都有注释、注释全面&#xff0c;用的三菱FX3U系列plc&#xff0c;本程序为单轴伺服&#xff0c;本程序已经设备实际批量应用、稳定生产、成熟可靠&#xff0c;自己辛苦编写的程序&#xff0c;借鉴价值高&#xff0c;是入门级三菱PLC电气爱好从业人员借…

SAM3应用分享:智能农业的作物监测系统

SAM3应用分享&#xff1a;智能农业的作物监测系统 1. 技术背景与应用场景 随着人工智能在农业领域的深入应用&#xff0c;精准农业正逐步从概念走向落地。传统作物监测依赖人工巡检或基于固定阈值的图像处理方法&#xff0c;存在效率低、适应性差等问题。近年来&#xff0c;基…

GPEN模型微调入门:自定义数据集训练步骤详解教程

GPEN模型微调入门&#xff1a;自定义数据集训练步骤详解教程 1. 镜像环境说明 本镜像基于 GPEN人像修复增强模型 构建&#xff0c;预装了完整的深度学习开发环境&#xff0c;集成了推理及评估所需的所有依赖&#xff0c;开箱即用。用户无需手动配置复杂的运行时依赖&#xff…

Emotion2Vec+ Large时间戳命名规则:outputs目录管理最佳实践

Emotion2Vec Large时间戳命名规则&#xff1a;outputs目录管理最佳实践 1. 引言 1.1 项目背景与开发动机 在语音情感识别领域&#xff0c;Emotion2Vec Large 模型凭借其强大的多语言支持和高精度表现&#xff0c;已成为业界领先的解决方案之一。该模型基于大规模语音数据训练…

DeepSeek-R1功能测评:纯CPU推理的真实体验

DeepSeek-R1功能测评&#xff1a;纯CPU推理的真实体验 1. 引言&#xff1a;轻量级推理模型的现实需求 随着大语言模型在数学推导、代码生成和逻辑分析等复杂任务中的广泛应用&#xff0c;推理能力已成为衡量模型智能水平的核心指标。然而&#xff0c;主流高性能推理模型普遍依…

物理学家所理解的熵:从热力学、统计物理,到生成模型

导语从“万物终将腐朽”的熵增定律出发&#xff0c;本文系统梳理了熵在热力学与统计物理中的严格定义&#xff0c;展示其如何作为连接微观与宏观的核心桥梁&#xff0c;并进一步走向量子体系、非平衡过程&#xff0c;乃至生成式人工智能模型&#xff0c;揭示熵在理解复杂系统与…

三菱PLC非标设备程序打包(三十四个) 程序都已经实际设备上批量应用,程序成熟可靠,借鉴价值高...

三菱PLC非标设备程序打包&#xff08;三十四个&#xff09; 程序都已经实际设备上批量应用&#xff0c;程序成熟可靠&#xff0c;借鉴价值高&#xff0c;程序都有注释&#xff0c;用的三菱FX5U、FX3U和Q系列plc&#xff0c;包括非标转盘机、组装机、热熔机、压合机、包装机、CC…

三菱PLC新手项目程序(含触摸屏程序) 此程序已经实际设备上批量应用,程序成熟可靠,借鉴价值高

三菱PLC新手项目程序&#xff08;含触摸屏程序&#xff09; 此程序已经实际设备上批量应用&#xff0c;程序成熟可靠&#xff0c;借鉴价值高&#xff0c;程序简单几百步、有注释、非常适合用来三菱plc新手学习&#xff0c;包括三菱plc程序和触摸屏程序&#xff0c;用的三菱FX…

BGE-Reranker-v2-m3为何需要rerank?RAG流程优化实战解析

BGE-Reranker-v2-m3为何需要rerank&#xff1f;RAG流程优化实战解析 1. 引言&#xff1a;RAG系统中的“搜不准”问题与重排序的必要性 在当前主流的检索增强生成&#xff08;Retrieval-Augmented Generation, RAG&#xff09;架构中&#xff0c;向量数据库通过语义嵌入&#…

直接搞通信才是上位机的灵魂,界面那玩意儿自己后面加。OPC这玩意儿在工业现场就跟吃饭喝水一样常见,先说DA再搞UA,咱们玩点真实的

C# opc ua/da通信源代码示例&#xff0c;应用简单直接可使用。 工业上位机必备代码&#xff0c;不含界面&#xff0c;不含界面&#xff0c;不含界面&#xff0c;重要的事说三遍先上OPC DA的硬核代码&#xff0c;这玩意儿用Com组件得劲。注意引用Interop.OPCAutomation.dll&…

FX3U PLC控制器资料 尺寸:185*130m 主控芯片:STM32F103VCT6 电源...

FX3U PLC控制器资料 尺寸&#xff1a;185*130m 主控芯片&#xff1a;STM32F103VCT6 电源:DC24V 功能&#xff1a; 1、2路RS232、1路RS485、1路CAN通讯 2、24路独立TTL输出&#xff0c;PC817光耦隔离&#xff0c;继电器输出&#xff1b;20路独立TTL输入&#xff0c;PC817光耦隔离…

CAM++版权信息保留:开源协议合规使用注意事项

CAM版权信息保留&#xff1a;开源协议合规使用注意事项 1. 背景与问题提出 随着深度学习技术在语音处理领域的广泛应用&#xff0c;说话人识别系统逐渐成为智能安防、身份验证和语音交互等场景中的关键技术组件。CAM 是一个基于上下文感知掩码机制的高效说话人验证模型&#…

西门子S7-1200PLC伺服电机运动控制FB功能块 1.该FB块是我集成的一个功能块

西门子S7-1200PLC伺服电机运动控制FB功能块1.该FB块是我集成的一个功能块&#xff0c;可以实现脉冲方式控制伺服电机位置控制。 2.一个块就可以实现伺服的上电&#xff0c;使能&#xff0c;相对定位&#xff0c;绝对定位&#xff0c;JOG运行&#xff0c;回原控制&#xff08;包…

YOLOv10官方镜像实测:小目标检测提升显著

YOLOv10官方镜像实测&#xff1a;小目标检测提升显著 在工业质检、智能交通和无人机巡检等场景中&#xff0c;小目标检测长期面临“看得见却抓不准”的困境。传统YOLO系列虽具备实时性优势&#xff0c;但在密集小目标场景下常因特征表达能力不足导致漏检。近期发布的 YOLOv10 …

Qwen3-VL-2B与InternVL2对比:长上下文处理能力评测

Qwen3-VL-2B与InternVL2对比&#xff1a;长上下文处理能力评测 1. 引言 随着多模态大模型在图文理解、视频分析和跨模态推理等场景中的广泛应用&#xff0c;长上下文处理能力已成为衡量视觉语言模型&#xff08;VLM&#xff09;性能的关键指标之一。尤其在处理长文档解析、长…

4090D单卡部署PDF-Extract-Kit:高性能PDF处理实战教程

4090D单卡部署PDF-Extract-Kit&#xff1a;高性能PDF处理实战教程 1. 引言 1.1 业务场景描述 在现代文档自动化处理流程中&#xff0c;PDF作为最通用的文档格式之一&#xff0c;广泛应用于科研论文、财务报表、合同协议等高价值信息载体。然而&#xff0c;传统PDF解析工具&a…

MGeo一致性哈希:分布式环境下请求均匀分配策略

MGeo一致性哈希&#xff1a;分布式环境下请求均匀分配策略 1. 技术背景与问题提出 在大规模分布式系统中&#xff0c;如何高效、稳定地将请求分发到多个服务节点&#xff0c;是保障系统性能和可用性的关键。尤其在地址相似度匹配这类高并发、低延迟的场景下&#xff0c;如阿里…

YOLO26如何导出ONNX模型?推理格式转换详细步骤

YOLO26如何导出ONNX模型&#xff1f;推理格式转换详细步骤 在深度学习部署过程中&#xff0c;模型格式的兼容性至关重要。ONNX&#xff08;Open Neural Network Exchange&#xff09;作为一种开放的模型交换格式&#xff0c;能够实现跨框架、跨平台的模型部署&#xff0c;广泛…

OTA bootloader 嵌入式 上位机 升级解决方案, 安全加密,稳定升级 MIIOT

OTA bootloader 嵌入式 上位机 升级解决方案&#xff0c; 安全加密&#xff0c;稳定升级 MIIOT &#xff0c;米家OTA 经过可靠性测试搞过嵌入式的人都懂&#xff0c;OTA升级要是翻车&#xff0c;那真是半夜三点爬起来修设备的节奏。今天就聊聊怎么让设备在空中升级的时候既稳如…