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管家大模型 解决方案: 一、准备数据集我这…...
智能体团队 (Agent Team)
概述 智能体团队是一种多智能体协作模式,它将多个智能体组织成一个团队,共同解决复杂任务。与智能体监督模式不同,智能体团队中的成员通常具有平等的地位,通过相互交流和协作来达成目标。这种模式特别适合需要多种观点或多领域专…...
AI日报 - 2025年04月19日
🌟 今日概览(60秒速览) ▎🤖 AGI突破 | OpenAI与Google模型在复杂推理上展现潜力,但距AGI仍有距离;因果AI被视为关键路径。 模型如o3解决复杂迷宫,o4-mini通过棋盘测试,但专家预测AGI仍需30年。 ▎…...
【实战中提升自己】内网安全部署之dot1x部署 本地与集成AD域的主流方式(附带MAC认证)
1 dot1x部署【用户名密码认证,也可以解决私接无线AP等功能】 说明:如果一个网络需要通过用户名认证才能访问内网,而认证失败只能访问外网与服务器,可以部署dot1x功能。它能实现的效果是,当内部用户输入正常的…...
算法—合并排序—js(场景:大数据且需稳定性)
合并排序基本思想(稳定且高效) 将数组递归拆分为最小单元,合并两个有序数组。 特点: 时间复杂度:O(n log n) 空间复杂度:O(n) 稳定排序 // 合并排序-分解 function mergeSort(arr) {if (arr.length < …...
绝对路径与相对路径
绝对路径和相对路径是在计算机系统中用于定位文件或目录的两种方式,以下是具体介绍: 绝对路径 • 定义:是从文件系统的根目录开始到目标文件或目录的完整路径,它包含了从根目录到目标位置的所有目录和子目录信息,具有…...
RabbitMQ,添加用户时,出现Erlang cookie不一致,导致添加用户失败的问题解决
1. 问题现象 RabbitMQ 添加用户,出现以下报错 ./rabbitmgctl add user admin admin666*2. 问题原因和解决方法 安装的 RabbitMQ 里的 Erlang cookie,和 Erlang 环境的 cookie 不一致导致的 解决方法:将 Erlang 环境的 cookie ,…...
阿拉丁神灯-第16届蓝桥第4次STEMA测评Scratch真题第2题
[导读]:超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成,后续会不定期解读蓝桥真题,这是Scratch蓝桥真题解析第219讲。 第16届蓝桥第4次STEMA测评已于2025年1月12日落下帷幕,编程题一共有5题(初级组只有前4道编…...
常用的验证验证 onnxruntime-gpu安装的命令
#工作记录 我们经常会遇到明明安装了onnxruntime-gpu或onnxruntime后,无法正常使用的情况。 一、强制重新安装 onnxruntime-gpu 及其依赖 # 强制重新安装 onnxruntime-gpu 及其依赖 pip install --force-reinstall --no-cache-dir onnxruntime-gpu1.18.0 --extra…...
docker配置skywalking 监控springcloud应用
在使用 Docker 配置 SkyWalking 监控 Spring Cloud 应用时,主要分为以下几个步骤: 1. 准备工作 确保你的开发环境已经安装了 Docker 和 Docker Compose。准备好 Spring Cloud 应用代码,并确保它支持 SkyWalking 的探针(Agent&…...
HBase安装与基本操作指南
## 1. 安装准备 首先确保您的系统已经安装了以下组件: - Java JDK 8或更高版本 - Hadoop(HBase可以运行在独立模式下,但建议配合Hadoop使用) ## 2. 下载与安装HBase ```bash # 下载HBase(以2.4.12版本为例) wget https://downloads.apache.org/hbase/2.4.12/hbase-2…...
【Linux】Rhcsa复习5
一、Linux文件系统权限 1、文件的一般权限 文件权限针对三类对象进行定义: owner 属主,缩写u group 属组, 缩写g other 其他,缩写o 每个文件针对每类访问者定义了三种主要权限: r:read 读 w&…...
C++11特性补充
目录 lambda表达式 定义 捕捉的方式 可变模板参数 递归函数方式展开参数包 数组展开参数包 移动构造和移动赋值 包装器 绑定bind 智能指针 RAII auto_ptr unique_ptr shared_ptr 循环引用 weak_ptr 补充 总结 特殊类的设计 不能被拷贝的类 只能在堆上创建…...
缓存 --- Redis性能瓶颈和大Key问题
缓存 --- Redis性能瓶颈和大Key问题 内存瓶颈网络瓶颈CPU 瓶颈持久化瓶颈大key问题优化方案 Redis 是一个高性能的内存数据库,但在实际使用中,可能会在内存、网络、CPU、持久化、大键值对等方面遇到性能瓶颈。下面从这些方面详细分析 Redis 的性能瓶颈&a…...
css3新特性第三章(文本属性)
一、文本属性 文本阴影文本换行文本溢出文本修饰文本描边 1.1 文本阴影 在 CSS3 中,我们可以使用 text-shadow 属性给文本添加阴影。 语法: text-shadow: h-shadow v-shadow blur color; 值描述h-shadow必需写,水平阴影的位置。允许负值。…...
Redis 缓存—处理高并发问题
Redis的布隆过滤器、单线程架构、双写一致性、比较穿透、击穿及雪崩、缓存更新方案及分布式锁。 1 布隆过滤器 是一种高效的概率型数据结构,用于判断元素是否存在。主要用于防止缓存穿透,通过拦截不存在的数据查询,避免击穿数据库。 原理&…...
嵌入式芯片中的 SRAM 内容细讲
什么是 RAM? RAM 指的是“随机存取”,意思是存储单元都可以在相同的时间内被读写,和“顺序访问”(如磁带)相对。 RAM 不等于 DRAM,而是一类统称,包括 SRAM 和 DRAM 两种主要类型。 静态随机存…...
实操基于MCP驱动的 Agentic RAG:智能调度向量召回或者网络检索
我们展示了一个由 MCP 驱动的 Agentic RAG,它会搜索向量数据库,当然如果有需要他会自行进行网络搜索。 为了构建这个系统,我们将使用以下工具: 博查搜索 用于大规模抓取网络数据。作为Faiss向量数据库。Cursor 作为 MCP 客户端。…...
位运算---总结
位运算 基础 1. & 运算符 : 有 0 就是 0 2. | 运算符 : 有 1 就是 1 3. ^ 运算符 : 相同为0 相异为1 and 无进位相加位运算的优选级 不用在意优先级,能加括号就加括号给一个数 n ,确定它的二进制位中第 x 位是 0 还是 1? 规定: 题中所说的第x位指:int 在32位机器下4个…...
从0开始搭建一套工具函数库,发布npm,支持commonjs模块es模块和script引入使用
文章目录 文章目标技术选型工程搭建1. 初始化项目2. 安装开发依赖3. 项目结构4. 配置文件tsconfig.json.eslintrc.jseslint.config.prettierrc.jsrollup.config.cjs创建 .gitignore文件 设置 Git 钩子创建示例工具函数8. 版本管理和发布9 工具函数测试方案1. 安装测试依赖2. 配…...
精通 Spring Cache + Redis:避坑指南与最佳实践
Spring Cache 以其优雅的注解方式,极大地简化了 Java 应用中缓存逻辑的实现。结合高性能的内存数据库 Redis,我们可以轻松构建出响应迅速、扩展性强的应用程序。然而,在享受便捷的同时,一些常见的“坑”和被忽视的最佳实践可能会悄…...
DSP28335入门学习——第一节:工程项目创建
写这个文章是用来学习的,记录一下我的学习过程。希望我能一直坚持下去,我只是一个小白,只是想好好学习,我知道这会很难,但我还是想去做! 本文写于:2025.04.20 DSP28335开发板学习——第一节:工程项目创建 前言开发板说明引用解答…...
Docker Registry(镜像仓库)
官方架构 Docker 使用客户端 - 服务器 (C/S) 架构模式,使用远程 API 来管理和创建 Docker 容器。Docker 容器通过 Docker 镜像来创建。 Docker 仓库(Registry):Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。Docker Hu…...
通过Dify快速搭建本地AI智能体开发平台
1. 安装Docker Desktop 访问 Docker官网 点击Download Docker Desktop,直接按照官方要求来就可以。 # 这串命令就像魔法咒语,在黑色窗口(命令提示符)里输入就能检查安装是否成功 docker --version2.安装dify 3.运行 Ollama 大…...
计算机视觉与深度学习 | Transformer原理,公式,代码,应用
Transformer 详解 Transformer 是 Google 在 2017 年提出的基于自注意力机制的深度学习模型,彻底改变了序列建模的范式,解决了 RNN 和 LSTM 在长距离依赖和并行计算上的局限性。以下是其原理、公式、代码和应用的详细解析。 一、原理 核心架构 Transformer 由 编码器(Encod…...
skywalking agent 关联docker镜像
Apache SkyWalking 提供了多种方式来部署和使用 SkyWalking Agent,包括在 Docker 容器中运行的应用。虽然 SkyWalking Agent 本身不是一个独立的 Docker 镜像,但你可以通过几种方式将 SkyWalking Agent 集成到你的 Docker 应用中。 方式一:手…...
【中间件】nginx将请求负载均衡转发给网关,网关再将请求转发给对应服务
一、场景 前端将请求发送给nginx,nginx将请求再转发给网关,网关再将请求转发至对应服务。由于网关会部署在多台服务器上,因此nginx需要负载均衡给网关发请求。nginx所有配置均参照官方文档nginx开发文档,可参考负载均衡板块内容 二…...
Milvus(1):什么是 Milvus
Milvus 由 Zilliz 开发,并很快捐赠给了 Linux 基金会下的 LF AI & Data 基金会,现已成为世界领先的开源向量数据库项目之一。它采用 Apache 2.0 许可发布,大多数贡献者都是高性能计算(HPC)领域的专家,擅…...
第十六节:高频开放题-React与Vue设计哲学差异
响应式原理(Proxy vs 虚拟DOM) 组合式API vs Hooks React 与 Vue 设计哲学差异深度解析 一、响应式原理的底层实现差异 1. Vue 的响应式模型(Proxy/数据劫持) Vue 的响应式系统通过 数据劫持 实现自动依赖追踪: • …...
【Hot100】 240. 搜索二维矩阵 II
目录 引言搜索二维矩阵 II我的解题贪心求解解题思路详解搜索策略(以从右上角开始为例)为什么这种方法有效? 完整代码实现复杂度分析示例演示 🙋♂️ 作者:海码007📜 专栏:算法专栏Ὂ…...
每日面试实录·携程·社招·JAVA
📍面试公司:携程 👜面试岗位:后端开发工程师(社招) 🕐面试时长:约 50 分钟 🔄面试轮次:第 1 轮技术面 ✨面试整体节奏: 这场携程的社招 Java 一面…...
Oracle--用户管理
前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除 用户管理在 Oracle 数据库中至关重要。一个服务器通常只运行一个 Oracle 实例,而一个 Oracle 用户代表一个用户群,他们通过该用…...
20.3 使用技巧5
版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的 20.3.8 CellContentClick事件 当增加新按钮列或者超链接列后,按钮或者超链接,会发现,按钮或者超链…...
Kubernetes相关的名词解释Metrics Server组件(7)
什么是Metrics Server? Metrics Server 是 Kubernetes 集群中的一个关键组件,主要用于资源监控和自动扩缩容。 kubernetes 从1.8版本开始不再集成cadvisor,也废弃了heapster,使用metrics server来提供metrics。那么...... 什么…...
17.【.NET 8 实战--孢子记账--从单体到微服务--转向微服务】--单体转微服务--SonarQube部署与配置
在将孢子记账系统从单体架构转向微服务架构的过程中,代码质量的管理变得尤为重要。随着项目规模的扩大和团队协作的深入,我们需要一个强大的工具来帮助我们持续监控和改进代码质量。我们首选SonarQube,它能够帮助我们识别代码中的潜在问题、技…...
计算机是如何看待数据的?
一、计算机如何“看待”数据? 物理层本质: 计算机的所有数据最终以二进制(0和1)在电路中表示(高电平1,低电平0)。 无论你用何种进制描述数据(如十六进制 0xA1 或十进制 161…...
25.4.20学习总结
如何使用listView组件来做聊天界面 1. 什么是CellFactory? 在JavaFX中,控件(比如ListView、TableView等)用Cell来显示每一条数据。 Cell:代表这个单元格(即每个列表项)中显示的内容和样式。 …...
SpringBoot3集成ES8.15实现余额监控
1. gradle依赖新增 implementation org.springframework.boot:spring-boot-starter-data-elasticsearch implementation co.elastic.clients:elasticsearch-java:8.15.02. application.yml配置 spring:elasticsearch:uris: http://localhost:9200username: elasticpassword: …...
STM32基础教程——串口收发
目录 前言 字长设置 编辑 停止位 起始位侦测 波特率 1. UART波特率的基本原理 2. 为什么需要先除以分频因子(USARTDIV)? (1)PCLK频率太高 (2)分频因子的作用 3. 为什么还需要再除以…...
Matlab 步进电机传递函数模糊pid
1、内容简介 Matlab 210-步进电机传递函数模糊pid 可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 4、参考论文 略...
unordered_map、unordered_set详解
深入理解C中的 unordered_map 和 unordered_set 在C标准库中,unordered_map 和 unordered_set 是两个基于哈希表(Hash Table)实现的高效容器。它们以O(1)的平均时间复杂度实现快速查找、插入和删除操作,特别适合需要高频…...
详解trl中的GRPOTrainer和GRPOConfig
引言 在大型语言模型(LLM)的强化学习微调领域, Group Relative Policy Optimization (GRPO) 算法因其高效性和资源友好性受到广泛关注。Hugging Face的 TRL (Transformer Reinforcement Learning) 库通过GRPOTrainer和GRPOConfig提供了该算法的开箱即用实现。本文将深入解析…...
【C++】多态 - 从虚函数到动态绑定的核心原理
📌 个人主页: 孙同学_ 🔧 文章专栏:C 💡 关注我,分享经验,助你少走弯路 文章目录 1. 多态的概念2. 多态的定义及实现2.1 多态的构成条件2.1.1实现多态还有两个必须重要条件:2.1.2 虚…...
项目预期管理:超越甘特图,实现客户价值交付
引言 在项目管理实践中,许多项目经理习惯于将注意力集中在甘特图的进度条上,关注任务是否按时完成、里程碑是否达成。然而,这种以计划管理为中心的方法往往忽略了项目管理的核心目标:满足客户预期,交付真正的价值。项…...
FISCO 2.0 安装部署WeBASE与区块链浏览器(环境搭建)
FISCO BCOS 2.0 安装部署WeBASE与区块链浏览器-对应的官网地址: WeBASE平台:https://webasedoc.readthedocs.io/zh-cn/latest/docs/WeBASE/install.html 区块链浏览器:https://fisco-bcos-documentation.readthedocs.io/zh-cn/latest/docs/br…...
xss学习3之服务端session
一、服务端的Session 1. cookie和session 1)cookie和session对比 cookie: 保存在客户端,包含所有key-value信息,浏览器访问多个网站时会积累大量cookie,占用存储空间,并在每次请求时携带所有cookie,增加…...
23种设计模式-结构型模式之适配器模式(Java版本)
Java 适配器模式(Adapter Pattern)详解 🔌 什么是适配器模式? 适配器模式用于将一个类的接口转换成客户端所期望的另一种接口,让原本接口不兼容的类可以协同工作。 📦 就像插头转换器,让不同…...
【2025计算机网络-面试常问】http和https区别是什么,http的内容有哪些,https用的是对称加密还是非对称加密,流程是怎么样的
HTTP与HTTPS全面对比及HTTPS加密流程详解 一、HTTP与HTTPS核心区别 特性HTTPHTTPS协议基础明文传输HTTP SSL/TLS加密层默认端口80443加密方式无加密混合加密(非对称对称)证书要求不需要需要CA颁发的数字证书安全性易被窃听、篡改、冒充防窃听、防篡改…...
使用安全继电器的急停电路设计
使用安全继电器的急停电路设计 一,急停回路的设计1,如何将急停接到线路当中?2,急停开关 如何接到安全继电器中 一,急停回路的设计 急停是每一个设备必不可少的部分,因为关乎安全,所以说所以说他…...
SpringCloud概述和环境搭建
SpringCloud概述和环境搭建 一.微服务的引入1.单体架构2.集群和分布式架构3.集群和分布式4.微服务架构4.微服务的优缺点 二.微服务解决方案-SpringCloud1.Spring Cloud简介2.Spring Cloud版本3.Spring Cloud实现方案4.Spring Cloud Alibaba 三.环境搭建1.安装JDK172.Ubantu上下…...