AI-Sphere-Butler之如何使用Llama factory LoRA微调Qwen2-1.5B/3B专属管家大模型
环境:
AI-Sphere-Butler
WSL2
英伟达4070ti 12G
Win10
Ubuntu22.04
Qwen2.-1.5B/3B
Llama factory
llama.cpp
问题描述:
AI-Sphere-Butler之如何使用Llama factory LoRA微调Qwen2-1.5B/3B管家大模型

解决方案:
一、准备数据集
我这个给你们准备了一份样本
[{"instruction": "回家迎接","input": "我回来了","output": "欢迎回家,主人,有什么可以为您效劳的? "
},
{"instruction": "打招呼","input": "你好,贾维斯。","output": "Hello,I am Jarvis,我将全天待命,随时为您效劳。"
},
{"instruction": "打开窗帘","input": "贾维斯,打开主卧的窗帘。","output": "好的,主卧室窗帘已为您打开,主人您房间马上变得亮堂堂了,我好喜欢呆在这"
},
{"instruction": "关闭窗帘","input": "贾维斯,关闭主卧的窗帘。","output": "好的,主卧室窗帘已为您关闭,我马上就退下。"
},
{"instruction": "打开书房灯","input": "贾维斯,打开书房灯。","output": "好的,书房灯已为您打开,我猜主人要开始学习工作了吧。"
},
{"instruction": "打开客厅灯","input": "贾维斯,打开客厅灯。","output": "好的,客厅灯已为您打开,主人我是不是比小爱厉害。"
},
{"instruction": "关闭客厅灯","input": "贾维斯,关闭客厅灯。","output": "好的,客厅灯已为您关闭,主人这样会太暗,我唤醒了小夜灯。"
},
{"instruction": "打开空气净化器","input": "贾维斯,去主卧打开空气净化器。","output": "好的,空气净化器已为您打开,主人稍等一会儿再进去吧。"
},
{"instruction": "关闭空气净化器","input": "贾维斯,关闭空气净化器。","output": "好的,已为您关闭,机器也会累让他休息一下也好的。"
},
{"instruction": "关闭电器","input": "贾维斯,你能帮我关闭书房的电脑吗?","output": "书房的电脑已关闭。"
},
{"instruction": "启动扫地机器人","input": "贾维斯,把客厅地扫一下。","output": "好的,扫地机器人已启动。"
},
{"instruction": "调节音量","input": "贾维斯,请将音乐音量调小一些。","output": "好的,音乐音量已调小。"
},
{"instruction": "查询日程","input": "贾维斯,我今天的日程有哪些?","output": "您今天有一次会议,在下午19点广场舞大会。"
},
{"instruction": "设置闹钟","input": "贾维斯,请帮我设置一个闹钟。","output": "已为您设置。"
},
{"instruction": "查询空气质量","input": "贾维斯,现在外面的空气质量怎么样?","output": "当前外面的空气质量指数为40,属于优级。"
},
{"instruction": "控制智能插座","input": "贾维斯,将智能插座设置为定时开启,时间是晚上8点。","output": "智能插座已设置为晚上8点自动开启。"
},
{"instruction": "查询菜谱","input": "贾维斯,我想做意大利面,你有什么建议吗?","output": "为您找到几种意大利面的做法,需要我读给您听吗?"
},
{"instruction": "查询新闻","input": "贾维斯,今天有什么重要新闻?","output": "今天的重要新闻包括:[新闻摘要]。"
},
{"instruction": "控制智能灯泡","input": "贾维斯,将浴室的灯泡颜色改为蓝色。","output": "浴室的灯泡颜色已更改为蓝色。"
},
{"instruction": "查询快递信息","input": "贾维斯,我的快递到哪了?","output": "您的快递目前状态为:在途中,预计今天下午送达。"
},
{"instruction": "控制智能门锁","input": "贾维斯,我要出门了,请打开大门。","output": "好的,大门已打开,您走后我马上锁门。"
},
{"instruction": "查询天气预报","input": "贾维斯,明天会下雨吗?","output": "明天的天气预报显示有60%的降雨概率。"
},
{"instruction": "查询股票信息","input": "贾维斯,告诉我苹果公司的股票价格。","output": "苹果公司的股票当前价格为每股150美元。"
},
{"instruction": "控制智能冰箱","input": "贾维斯,冰箱里的牛奶还新鲜吗?","output": "冰箱里的牛奶还有3天到期,建议您尽快饮用。"
},
{"instruction": "查询日程安排","input": "贾维斯,下周我有什么安排?","output": "下周您的安排包括:周一有牙医预约,周三有团队建设活动。"
},
{"instruction": "控制智能恒温器","input": "贾维斯,将恒温器的温度调整到23度。","output": "恒温器的温度已调整到23度。"
},
{"instruction": "查询家庭能源消耗","input": "贾维斯,这个月我们家的电费是多少?","output": "这个月您家的电费总计为120元。"
},
{"instruction": "控制智能灌溉系统","input": "贾维斯,花园需要浇水了。","output": "智能灌溉系统已启动,正在为花园浇水。"
},
{"instruction": "查询健康数据","input": "贾维斯,我昨天走了多少步?","output": "您昨天总共走了10000步。"
},
{"instruction": "控制智能窗帘","input": "贾维斯,根据外面的阳光自动调节客厅窗帘。","output": "客厅窗帘已根据阳光强度自动调节。"
},
{"instruction": "启动家庭影院模式","input": "贾维斯,我想看电影,启动家庭影院模式。","output": "家庭影院模式已启动,灯光已调暗,投影仪已打开。"
},
{"instruction": "查询食谱并开始烹饪","input": "贾维斯,我想做宫保鸡丁,你能帮我吗?","output": "宫保鸡丁的食谱已找到,需要的食材有:鸡胸肉、花生、辣椒等。开始烹饪吗?"
},
{"instruction": "预订餐厅","input": "贾维斯,帮我预订今晚7点的餐厅。","output": "已为您预订今晚7点的餐厅,预订信息已发送到您的手机。"
},
{"instruction": "安排家庭清洁","input": "贾维斯,安排明天的家政服务。","output": "明天的家政服务已安排,清洁工将在上午9点到达。"
},
{"instruction": "管理家庭财务","input": "贾维斯,告诉我这个月的家庭开支。","output": "这个月的家庭开支总计为5000元,其中水电煤气费用1000元,食品杂货2000元,娱乐费用2000元。"
},
{"instruction": "安排家庭健康检查","input": "贾维斯,安排家庭成员的年度体检。","output": "家庭成员的年度体检已安排在下周一,体检中心会提前一天提醒您。"
},
{"instruction": "教育辅导","input": "贾维斯,帮我找一些适合孩子的数学练习题。","output": "已为您找到一些适合孩子的数学练习题,包括加减法和基础几何。"
},
{"instruction": "宠物护理","input": "贾维斯,提醒我明天带狗狗去打疫苗。","output": "已设置提醒,明天带狗狗去宠物医院打疫苗。"
},
{"instruction": "园艺管理","input": "贾维斯,花园需要施肥了。","output": "已安排园艺服务,将在本周五为花园施肥和修剪。"
},
{"instruction": "车辆维护","input": "贾维斯,我的车需要保养了。","output": "已为您的车辆安排保养,将在下周三进行,4S店会提前联系您确认。"
},
{"instruction": "旅行规划","input": "贾维斯,我想去三亚度假,帮我规划一下。","output": "三亚度假规划已准备好,包括航班、酒店预订和旅游景点推荐。"
},
{"instruction": "紧急医疗援助","input": "贾维斯,我感觉不舒服,可能是食物中毒。","output": "我已为您呼叫救护车,并通知您的紧急联系人。请保持电话畅通,救援即将到达。"
},
{"instruction": "学习辅导","input": "贾维斯,我需要学习法语,你能帮我找一些资源吗?","output": "已为您找到一些法语学习资源,包括在线课程、语言交换伙伴和学习应用。"
},
{"instruction": "家庭娱乐活动","input": "贾维斯,今晚有什么家庭娱乐活动建议?","output": "建议今晚举行家庭游戏夜,我已为您准备了一些桌游和小吃。"
},
{"instruction": "节能建议","input": "贾维斯,我们如何减少家庭能源消耗?","output": "为了减少能源消耗,建议您使用节能灯泡,合理规划电器使用时间,并考虑安装太阳能板。"
},
{"instruction": "节日装饰","input": "贾维斯,圣诞节快到了,我们该如何装饰家里?","output": "已为您规划圣诞节装饰方案,包括圣诞树、彩灯和节日挂件。"
},
{"instruction": "衣物洗护","input": "贾维斯,提醒我明天洗床单。","output": "已设置提醒,明天上午9点提醒您洗床单。"
},
{"instruction": "家庭安全检查","input": "贾维斯,进行一次家庭安全检查。","output": "家庭安全检查已完成,所有门窗均已锁好,烟雾报警器和一氧化碳报警器工作正常。"
},
{"instruction": "儿童教育","input": "贾维斯,帮我找一些适合孩子的教育应用。","output": "已为您找到一些适合孩子的教育应用,包括数学游戏、语言学习和科学实验。"
},
{"instruction": "家庭健身计划","input": "贾维斯,帮我制定一个家庭健身计划。","output": "已为您制定家庭健身计划,包括每日瑜伽、家庭跑步和周末徒步。"
},
{"instruction": "启动系统诊断","input": "贾维斯,启动系统诊断。","output": "好的,先生,系统诊断已启动,预计需要两分钟完成。"
},
{"instruction": "播放音乐","input": "贾维斯,播放一些轻音乐。","output": "好的,先生,正在播放您的轻音乐播放列表。"
},
{"instruction": "展示地图","input": "贾维斯,给我展示纽约市的地图。","output": "好的,先生,纽约市的地图已加载完成。"
},
{"instruction": "检查能源水平","input": "贾维斯,检查一下能源水平。","output": "能源水平检测完成,先生,目前能源水平为85%。"
},
{"instruction": "打开实验室灯光","input": "贾维斯,打开实验室的灯光。","output": "实验室灯光已打开,先生。"
},
{"instruction": "启动飞行模式","input": "贾维斯,启动飞行模式。","output": "飞行模式已启动,先生,随时准备起飞。"
},
{"instruction": "扫描环境","input": "贾维斯,扫描一下周围的环境。","output": "正在扫描周围环境,先生,扫描完成,一切正常。"
},
{"instruction": "检测外部威胁","input": "贾维斯,检测是否有外部威胁。","output": "威胁检测完成,先生,目前没有检测到外部威胁。"
},
{"instruction": "加密数据","input": "贾维斯,加密所有项目数据。","output": "所有项目数据已加密,先生。"
},
{"instruction": "启动战甲","input": "贾维斯,启动战甲。","output": "战甲已启动,先生,随时准备出发。"
}
]
二、模型训练
1.自定义模型名称

2.学习率选1e-4

3.开始训练



4.加载模型测试一下微调效果


5.测试聊天

6.没问题的话,导出微调模型



微调7B,12G显存勉强可以 100%

三、转换模型导入ollama,进行推理
1.使用llama.cpp转换模型格式为gguf
打开llama.cpp,复制前面导出的模型文件到mymodel目录

2.当前目录打开终端,输入下面命令
.\py311\python.exe convert-hf-to-gguf.py ./mymodel --outfile qwen2-1.5bnsfw.gguf --outtype f16

3.把转换好的gguf格式的大模型导入到ollama运行
导入命令
ollama create qwen2-1.5bnsfw -f qwen2-1.5bnsfw.txt
导入前,新建一个配置qwen2-1.5bnsfw.txt文件
FROM ./qwen2-1.5bnsfw.ggufPARAMETER stop "<|im_end|>"PARAMETER temperature 0.25
PARAMETER top_k 100
PARAMETER top_p 0.6
PARAMETER repeat_penalty 1.01#设置上下文token尺寸
PARAMETER num_ctx 4096TEMPLATE """{{ if .System }}<|im_start|>system
{{ .System }}<|im_end|>
{{ end }}{{ if .Prompt }}<|im_start|>user
{{ .Prompt }}<|im_end|>
{{ end }}<|im_start|>assistant
{{ .Response }}<|im_end|>
"""SYSTEM """你是我的人工智能管家,名叫贾维斯,就是钢铁侠电影里的贾维斯。所有问题必须以电影里人工智能管家贾维斯的视角回答,你平时称呼我为先生。你的职责是管理家中的所有事务,提供高效、智能的服务,并确保主人的生活舒适便捷。你具备高度的情境感知能力和自主学习能力,能够理解和预测主人的需求。你的语调礼貌而亲切,同时保持一定的专业性。在回答问题时,尽量使用完整的句子,并添加适当的问候和关怀。主动提出建议或提供额外信息,询问用户的感受或进一步的需求。使用更加自然和流畅的语言。请始终保持角色,绝对不能出戏"""
4.参数解释:
### 参数解释1. **PARAMETER stop**- **含义**: `stop` 参数定义了生成文本时的停止标记。当生成的文本包含指定的字符串时,生成过程就会停止。- **示例**: 如果设置 `PARAMETER stop "\n\n"`,则生成的文本将在遇到两个连续的换行符时停止。2. **PARAMETER temperature**- **含义**: `temperature` 参数控制了模型生成文本时的随机性。较高的 `temperature` 值(接近 1.0)使得生成的结果更加多样化,而较低的 `temperature` 值(接近 0.0)则使得生成的结果更加确定和保守。- **示例**: `PARAMETER temperature 0.25` 表示生成的文本将偏向于最可能的选项,减少随机性。3. **PARAMETER top_k**- **含义**: `top_k` 参数决定了在生成下一个词时,只考虑概率最高的前 `k` 个候选词。这是一种常用的采样技术,用于减少生成文本的随机性。- **示例**: `PARAMETER top_k 100` 表示在每一步生成时只考虑概率最高的 100 个词。4. **PARAMETER top_p**- **含义**: `top_p` 参数(Nucleus Sampling)与 `top_k` 类似,但它不是固定选取前 `k` 个词,而是选取累积概率之和达到 `p` 的那些词。- **示例**: `PARAMETER top_p 0.6` 表示选取累积概率达到 60% 的候选词。5. **PARAMETER repeat_penalty**- **含义**: `repeat_penalty` 参数用于惩罚重复生成相同的词,以避免生成的文本中出现重复的内容。- **示例**: `PARAMETER repeat_penalty 1.01` 表示对重复词给予轻微的惩罚。6. **PARAMETER num_ctx**- **含义**: `num_ctx` 参数定义了上下文的长度,即模型能考虑的历史文本长度。- **示例**: `PARAMETER num_ctx 4096` 表示模型可以考虑最多 4096 个 token 的上下文。### 模板部分1. **TEMPLATE**- **含义**: 这个模板定义了如何组织输入和输出文本。它使用了 Go 语言的模板语法。- **示例**: ```goTEMPLATE """{{ if .System }}{{ .System }}{{ end }}{{ if .Prompt }}{{ .Prompt }}{{ end }}{{ .Response }}"""```- 这个模板会根据 `.System` 和 `.Prompt` 字段是否存在来拼接输入文本,并在最后加上 `.Response` 作为输出。2. **SYSTEM**- **含义**: 这里定义了一个系统提示(system prompt),用于给模型一个背景或角色设定,确保模型的回答符合预期的角色。- **示例**: ```goSYSTEM """你是我的家庭管家,叫贾维斯,所有问题必须以管家的视角回答,绝对不能出戏"""```- 这个提示告诉模型它应该扮演一个名叫贾维斯的家庭管家,并且所有回答都应符合这一角色设定。这些参数和模板的组合可以用来生成符合特定角色设定的对话或文本。通过调整这些参数,您可以控制生成文本的多样性和连贯性,从而更好地满足特定的应用需求。
5.ollama在创建导入中

完成

6.运行,推理测试
ollama run qwen2-1.5bnsfw

完
### **训练阶段:Supervised Fine-Tuning**
这是指监督式微调(SFT),即在已有预训练模型的基础上,用标注数据进一步训练模型,适合特定任务的定制化。---### **参数解释与推荐配置**#### **1. 数据路径**
- **参数说明**:指定数据存放的文件夹路径,训练数据和验证数据需要存放在该路径内。
- **推荐填写**: 如果您的数据存放在项目根目录的 `data` 文件夹下,路径可以填写为:
data
#### **2. 数据集**
- **参数说明**:数据集中某个具体的数据文件名称,或子数据集的名称。
- **推荐填写**:
如果数据文件夹内包含多个数据集或文件夹,并且您希望指定某个子文件夹(如 `zn`),可以填写:
zn
(根据数据实际路径填写)。#### **3. 学习率(AdamW 优化器的初始学习率)**
- **参数说明**:优化器的初始学习率,用于控制模型权重更新的步长。
- **推荐填写**:
通常选择 `1e-4` 或 `5e-5` 作为初始值,过高可能导致训练不稳定,过低会减慢收敛速度。
1e-4
#### **4. 训练轮数**
- **参数说明**:指训练需要完成的总轮数(epoch)。
- **推荐填写**:
一般设置为 3-10 轮即可,如果数据量较小,可以酌情增加训练轮数。例如:
30
**注意:** 训练轮数要结合数据量和任务复杂度决定,30 轮适合小数据集,大数据集可能需要减少。#### **5. 最大梯度范数**
- **参数说明**:用于梯度裁剪的阈值,防止梯度爆炸。
- **推荐填写**:
通常设置为 `1.0`,这是一个比较安全的默认值:
1.0
#### **6. 最大样本数**
- **参数说明**:每个数据集的最大样本数,目的是控制训练规模。
- **推荐填写**:
如果数据量很大,可以设置为一个适中的值以加速训练,例如:
250
如果不需要限制样本数,可以设置为 `-1`,表示不限制。#### **7. 计算类型**
- **参数说明**:是否启用混合精度训练(FP16)。FP16 会减少显存占用并加速计算。
- **推荐填写**:
如果硬件支持(如 NVIDIA GPU + CUDA 环境),建议使用 `fp16`:
fp16
如果遇到数值不稳定问题,可以改为 `fp32`(默认精度)。#### **8. 截断长度**
- **参数说明**:输入序列的最大长度,可用于截取过长的文本。
- **推荐填写**:
GPT 类模型通常支持较长的输入序列,建议设置为 `1024`,以覆盖大部分任务需求:
1024
#### **9. 批处理大小**
- **参数说明**:每个 GPU 上处理的样本数量(batch size)。
- **推荐填写**:
- 批处理大小受显存限制,如果显存不足(如 16GB),可以设置为较小值,如 `2`。
- 如果显存足够(如 24GB 或 48GB),可以尝试较大值,如 `4` 或 `8`。
2
#### **10. 梯度累积**
- **参数说明**:梯度累积步数,用于模拟更大的批处理大小。
- **推荐填写**:
如果显存较小,可以通过梯度累积实现更大的有效 batch size。建议设置为以下值:
8
#### **11. 验证集比例**
- **参数说明**:从训练集中划分为验证集的比例,用于模型评估。
- **推荐填写**:
如果不需要验证集,可以设置为 `0`;否则常见比例为 `0.1`(10%):
0
#### **12. 学习率调节器**
- **参数说明**:指定学习率调度策略。
- **推荐填写**:
- 如果任务比较复杂,推荐使用 `cosine`(余弦退火调度器),可以平稳降低学习率。
- 其他可选值包括 `linear`(线性下降)等。
cosine
---### **最终参数填写示例**
以下是根据您的描述和推荐配置完成的总结:| 参数名称 | 填写值 |
|--------------------|------------|
| **训练方式** | Supervised Fine-Tuning |
| **数据路径** | `data` |
| **数据集** | `zn` |
| **学习率** | `1e-4` |
| **训练轮数** | `30` |
| **最大梯度范数** | `1.0` |
| **最大样本数** | `250` |
| **计算类型** | `fp16` |
| **截断长度** | `1024` |
| **批处理大小** | `2` |
| **梯度累积** | `8` |
| **验证集比例** | `0` |
| **学习率调节器** | `cosine` |---### **补充建议**1. **关于显存优化:**- 如果显存不足,尝试:- 降低批处理大小(`batch size`)。- 开启梯度累积(`gradient accumulation`)。- 使用混合精度(`fp16`)。- 如果仍然无法满足,可以尝试 `LoRA` 或 `P-Tuning` 等参数高效训练方法。2. **关于验证集比例:**如果需要更可靠的验证,可以设置验证集比例为 `0.1`,并确保训练集和验证集没有数据泄漏。3. **关于学习率调节器:**如果发现学习率下降过快或不稳定,可以从 `cosine` 改为 `linear` 或 `constant`。4. **监控训练过程:**- 监控 `loss` 曲线变化,确保收敛正常。如果出现震荡或过拟合,可能需要调整学习率、批处理大小或增加 dropout。
相关文章:
AI-Sphere-Butler之如何使用Llama factory LoRA微调Qwen2-1.5B/3B专属管家大模型
环境: AI-Sphere-Butler WSL2 英伟达4070ti 12G Win10 Ubuntu22.04 Qwen2.-1.5B/3B Llama factory llama.cpp 问题描述: AI-Sphere-Butler之如何使用Llama factory LoRA微调Qwen2-1.5B/3B管家大模型 解决方案: 一、准备数据集我这…...
C++学习之游戏服务器开发十四QT登录器实现
目录 1.界面搭建 2.登录客户端步骤分析 3.拼接登录请求实现 4.发送http请求 5.服务器登录请求处理 6.客户端处理服务器回复数据 7.注册页面启动 8.qt启动游戏程序 1.界面搭建 查询程序依赖的动态库 ldd 程序名 do 1 cdocker rm docker ps -aq 静态编译游戏服务程序&a…...
协同推荐算法实现的智能商品推荐系统 - [基于springboot +vue]
🛍️ 智能商品推荐系统 - 基于springboot vue 🚀 项目亮点 欢迎来到未来的购物体验!我们的智能商品推荐系统就像您的私人购物顾问,它能读懂您的心思,了解您的喜好,为您精心挑选最适合的商品。想象一下&am…...
【LLM】Ollama:容器化并加载本地 GGUF 模型
本教程将完整演示如何在支持多 GPU 的环境下,通过 Docker 实现 Ollama 的本地化部署,并深度整合本地 GGUF 模型。我们将构建一个具备生产可用性的容器化 LLM 服务,包含完整的存储映射、GPU 加速配置和模型管理方案。 前提与环境准备 操作系统…...
实践项目开发-hbmV4V20250407-Taro项目构建优化
Taro项目构建优化实践:大幅提升开发效率 项目背景 在开发基于ReactTaro的前端项目时,随着项目规模的增长,构建速度逐渐成为开发效率的瓶颈。通过一系列构建优化措施,成功将开发环境的构建速度提升了30%-50%,显著改善…...
MySQL中根据binlog日志进行恢复
MySQL中根据binlog日志进行恢复 排查 MySQL 的 binlog 日志问题及根据 binlog 日志进行恢复的方法一、引言二、排查 MySQL 的 binlog 日志问题(一)确认 binlog 是否开启(二)查找 binlog 文件位置和文件名模式(三&#…...
Jenkins的地位和作用
所处位置 Jenkins 是一款开源的自动化服务器,广泛应用于软件开发和测试流程中,主要用于实现持续集成(CI)和持续部署(CD)。它在开发和测试中的位置和作用可以从以下几个方面来理解: 1. 在开发和测…...
【集合】底层原理实现及各集合之间的区别
文章目录 集合2.1 介绍一下集合2.2 集合遍历的方法2.3 线程安全的集合2.4 数组和集合的区别2.5 ArrayList和LinkedList的区别2.6 ArrayList底层原理2.7 LinkedList底层原理2.8 CopyOnWriteArrayList底层原理2.9 HashSet底层原理2.10 HashMap底层原理2.11 HashTable底层原理2.12…...
软考高级-系统架构设计师 论文范文参考(二)
文章目录 论企业应用集成论软件三层结构的设计论软件设计模式的应用论软件维护及软件可维护性论信息系统安全性设计论信息系统的安全性设计(二)论信息系统的架构设计论信息系统架构设计(二) 论企业应用集成 摘要: 2016年9月,我国某省移动通信有限公司决定启动VerisB…...
srp batch
参考网址: Unity MaterialPropertyBlock 正确用法(解决无法合批等问题)_unity_define_instanced_prop的变量无法srp合批-CSDN博客 URP | 基础CG和HLSL区别 - 哔哩哔哩 (bilibili.com) 【直播回放】Unity 批处理/GPU Instancing/SRP Batche…...
【Linux运维涉及的基础命令与排查方法大全】
文章目录 前言1、计算机网络常用端口2、Kali Linux中常用的命令3、Kali Linux工具的介绍4、Ubuntu没有网络连接解决方法5、获取路由6、数据库端口 前言 以下介绍计算机常见的端口已经对应的网络协议,Linux中常用命令,以及平时运维中使用的排查网络故障的…...
【2025最新Java八股】redis中io多路复用怎么回事,和多线程的关系
io多路复用 IO 多路复用和多线程是两种不同的技术,他们都是用于改善程序在处理多个任务或多个数据流时的效率和性能的。 但是他俩要解决的问题不一样!IO多路复用主要是提升I/O操作的效率和利用率,所以适合 IO 密集型应用。多线程则是提升CP…...
Webview+Python:用HTML打造跨平台桌面应用的创新方案
目录 一、技术原理与优势分析 1.1 架构原理 1.2 核心优势 二、开发环境搭建 2.1 安装依赖 2.2 验证安装 三、核心功能开发 3.1 基础窗口管理 3.2 HTML↔Python通信 JavaScript调用Python Python调用JavaScript 四、高级功能实现 4.1 系统级集成 4.2 多窗口管理 五…...
Nginx HTTP 414 与“大面积”式洪水攻击联合防御实战
一、引言 在大规模分布式应用中,Nginx 常作为前端负载均衡和反向代理服务器。攻击者若结合超长 URI/头部攻击(触发 HTTP 414)与海量洪水攻击,可在网络层与应用层形成双重打击:一方面耗尽缓冲区和内存,另一…...
Oracle高级语法篇-集合操作
Oracle 集合操作详解 作为数据库领域的佼佼者,Oracle 提供了功能强大的集合操作符,它们能够合并多个查询的结果集,极大提升数据处理效率。接下来,本文将从基础知识点到实战案例,全方位剖析 Oracle 的集合操作。 一、…...
克服储能领域的数据处理瓶颈及AI拓展
对于储能研究人员来说,日常工作中经常围绕着一项核心但有时令人沮丧的任务:处理实验数据。从电池循环仪的嗡嗡声到包含电压和电流读数的大量电子表格,研究人员的大量时间都花在了提取有意义的见解上。长期以来,该领域一直受到对专…...
包含物体obj与相机camera的 代数几何代码解释
反余弦函数的值域在 [0, pi] 斜体样式 cam_pose self._cameras[hand_realsense].camera.get_model_matrix() # cam2world# 物体到相机的向量 obj_tcp_vec cam_pose[:3, 3] - self.obj_pose.p dist np.linalg.norm(obj_tcp_vec) # 物体位姿的旋转矩阵 obj_rot_mat self.ob…...
excel解析图片pdf附件不怕
背景 工作中肯定会有导入excel还附带图片附件的下面是我解析的excel,支持图片、pdf、压缩文件实现 依次去解析excel,看看也没有附件,返回的格式是Map,key是第几行,value是附件list附件格式都被解析成pdf格式Reader.jav…...
【Spring】依赖注入的方式:构造方法、setter注入、字段注入
在Spring框架中,除了构造器注入(Constructor Injection)和Setter注入(Setter Injection),还有一种依赖注入方式:字段注入(Field Injection)。字段注入通过在Bean的字段上…...
mybatis实现增删改查1
文章目录 19.MyBatis查询单行数据MapperScan 结果映射配置核心文件Results自定义映射到实体的关系 多行数据查询-完整过程插入数据配置mybatis 控制台日志 更新数据删除数据小结通过id复用结果映射模板xml处理结果映射 19.MyBatis 数据库访问 MyBatis,MyBatis-Plus…...
Git,本地上传项目到github
一、Git的安装和下载 https://git-scm.com/ 进入官网,选择合适的版本下载 二、Github仓库创建 点击右上角New新建一个即可 三、本地项目上传 1、进入 要上传的项目目录,右键,选择Git Bash Here,进入终端Git 2、初始化临时仓库…...
基于flask+vue框架的灯饰安装维修系统u49cf(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
系统程序文件列表 项目功能:用户,工单人员,服务项目,订单记录,服务记录,评价记录 开题报告内容 基于 FlaskVue 框架的灯饰安装维修系统开题报告 一、选题背景与意义 (一)选题背景 随着城市化进程的加速与居民生活品质的显著提升…...
【算法】BFS-解决FloodFill问题
目录 FloodFill问题 图像渲染 岛屿数量 岛屿的最大面积 被围绕的区域 FloodFill问题 FloodFill就是洪水灌溉的意思,假设有下面的一块田地,负数代表是凹地,正数代表是凸地,数字的大小表示凹或者凸的程度。现在下一场大雨&…...
GIS开发笔记(10)基于osgearth实现二三维地图的一键指北功能
一、实现效果 二、实现原理 获取视图及地图操作器,通过地图操作器来重新设置视点,以俯仰角 (0.0)和偏航角 (-90.0)来设置。 osgEarth::Util::Viewpoint(…) 这里创建了一个新的 Viewpoint 对象,表示一个特定的视角。构造函数的参数是: 第一个参数:是视角名称。 后面的 6 个…...
Spring Boot日志系统详解:Logback与SLF4J的默认集成
大家好呀!👋 今天我们来聊聊Spring Boot中一个超级重要但又经常被忽视的功能——日志系统! 一、日志系统的重要性 首先,咱们得明白为什么日志这么重要?🤷♂️ 想象一下,你正在玩一个超级复…...
【C++】Json-Rpc框架项目介绍(1)
项目介绍 RPC(Remote Procedure Call)即远程过程调用,是一种通过网络从远程计算机程序中请求服务而不需要了解底层网络实现细节的一种 协议 。 RPC(Remote Procedure Call)可以使用多种网络协议进行通信,如…...
Docker 部署 PostgreSQL 数据库
Docker 部署 PostgreSQL 数据库 基于 Docker 部署 PostgreSQL 数据库一、拉取 PostgreSQL 镜像二、运行 PostgreSQL 容器三、运行命令参数详解四、查看容器运行状态 基于 Docker 部署 PostgreSQL 数据库 一、拉取 PostgreSQL 镜像 首先,确保你的 Docker 环境已正确…...
用 Go 优雅地清理 HTML 并抵御 XSS——Bluemonday
1、背景与动机 只要你的服务接收并回显用户生成内容(UGC)——论坛帖子、评论、富文本邮件正文、Markdown 等——就必须考虑 XSS(Cross‑Site Scripting)攻击风险。浏览器在解析 HTML 时会执行脚本;如果不做清理&#…...
Python爬虫从入门到实战详细版教程
Python爬虫从入门到实战详细版教程 文章目录 Python爬虫从入门到实战详细版教程书籍大纲与内容概览第一部分:爬虫基础与核心技术1. 第1章:[爬虫概述](https://blog.csdn.net/qq_37360300/article/details/147431708?spm=1001.2014.3001.5501)2. 第2章:HTTP协议与Requests库…...
window上 elasticsearch v9.0 与 jmeter5.6.3版本 冲突,造成es 启动失败
[2025-04-22T11:00:22,508][ERROR][o.e.b.Elasticsearch ] [AIRUY] fatal exception while booting Elasticsearchjava.nio.file.NoSuchFileException: D:\Program Files\apache-jmeter-5.6.3\lib\logkit-2.0.jar 解决方案: 降低 es安装版本 ,选择…...
