AI-Sphere-Butler之如何使用Llama factory LoRA微调Qwen2-1.5B/3B专属管家大模型

news2025/4/24 5:34:21

环境:

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.gguf

PARAMETER 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 4096

TEMPLATE """{{ 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 语言的模板语法。
   - **示例**: 
     ```go
     TEMPLATE """{{ if .System }}
     {{ .System }}
     {{ end }}{{ if .Prompt }}
     {{ .Prompt }}
     {{ end }}
     {{ .Response }}
     """
     ```
     - 这个模板会根据 `.System``.Prompt` 字段是否存在来拼接输入文本,并在最后加上 `.Response` 作为输出。

2. **SYSTEM**
   - **含义**: 这里定义了一个系统提示(system prompt),用于给模型一个背景或角色设定,确保模型的回答符合预期的角色。
   - **示例**: 
     ```go
     SYSTEM """你是我的家庭管家,叫贾维斯,所有问题必须以管家的视角回答,绝对不能出戏"""
     ```
     - 这个提示告诉模型它应该扮演一个名叫贾维斯的家庭管家,并且所有回答都应符合这一角色设定。

这些参数和模板的组合可以用来生成符合特定角色设定的对话或文本。通过调整这些参数,您可以控制生成文本的多样性和连贯性,从而更好地满足特定的应用需求。

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。

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

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

相关文章

协同推荐算法实现的智能商品推荐系统 - [基于springboot +vue]

&#x1f6cd;️ 智能商品推荐系统 - 基于springboot vue &#x1f680; 项目亮点 欢迎来到未来的购物体验&#xff01;我们的智能商品推荐系统就像您的私人购物顾问&#xff0c;它能读懂您的心思&#xff0c;了解您的喜好&#xff0c;为您精心挑选最适合的商品。想象一下&am…

Jenkins的地位和作用

所处位置 Jenkins 是一款开源的自动化服务器&#xff0c;广泛应用于软件开发和测试流程中&#xff0c;主要用于实现持续集成&#xff08;CI&#xff09;和持续部署&#xff08;CD&#xff09;。它在开发和测试中的位置和作用可以从以下几个方面来理解&#xff1a; 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…

srp batch

参考网址&#xff1a; Unity MaterialPropertyBlock 正确用法&#xff08;解决无法合批等问题&#xff09;_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、数据库端口 前言 以下介绍计算机常见的端口已经对应的网络协议&#xff0c;Linux中常用命令&#xff0c;以及平时运维中使用的排查网络故障的…

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 多窗口管理 五…

克服储能领域的数据处理瓶颈及AI拓展

对于储能研究人员来说&#xff0c;日常工作中经常围绕着一项核心但有时令人沮丧的任务&#xff1a;处理实验数据。从电池循环仪的嗡嗡声到包含电压和电流读数的大量电子表格&#xff0c;研究人员的大量时间都花在了提取有意义的见解上。长期以来&#xff0c;该领域一直受到对专…

包含物体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…

mybatis实现增删改查1

文章目录 19.MyBatis查询单行数据MapperScan 结果映射配置核心文件Results自定义映射到实体的关系 多行数据查询-完整过程插入数据配置mybatis 控制台日志 更新数据删除数据小结通过id复用结果映射模板xml处理结果映射 19.MyBatis 数据库访问 MyBatis&#xff0c;MyBatis-Plus…

Git,本地上传项目到github

一、Git的安装和下载 https://git-scm.com/ 进入官网&#xff0c;选择合适的版本下载 二、Github仓库创建 点击右上角New新建一个即可 三、本地项目上传 1、进入 要上传的项目目录&#xff0c;右键&#xff0c;选择Git Bash Here&#xff0c;进入终端Git 2、初始化临时仓库…

基于flask+vue框架的灯饰安装维修系统u49cf(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;用户,工单人员,服务项目,订单记录,服务记录,评价记录 开题报告内容 基于 FlaskVue 框架的灯饰安装维修系统开题报告 一、选题背景与意义 &#xff08;一&#xff09;选题背景 随着城市化进程的加速与居民生活品质的显著提升&#xf…

【算法】BFS-解决FloodFill问题

目录 FloodFill问题 图像渲染 岛屿数量 岛屿的最大面积 被围绕的区域 FloodFill问题 FloodFill就是洪水灌溉的意思&#xff0c;假设有下面的一块田地&#xff0c;负数代表是凹地&#xff0c;正数代表是凸地&#xff0c;数字的大小表示凹或者凸的程度。现在下一场大雨&…

GIS开发笔记(10)基于osgearth实现二三维地图的一键指北功能

一、实现效果 二、实现原理 获取视图及地图操作器,通过地图操作器来重新设置视点,以俯仰角 (0.0)和偏航角 (-90.0)来设置。 osgEarth::Util::Viewpoint(…) 这里创建了一个新的 Viewpoint 对象,表示一个特定的视角。构造函数的参数是: 第一个参数:是视角名称。 后面的 6 个…

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 解决方案&#xff1a; 降低 es安装版本 &#xff0c;选择…

【C++初阶】第15课—模版进阶

文章目录 1. 模版参数2. 模版的特化2.1 概念2.2 函数模版特化2.3 类模板特化2.3.1 全特化2.3.2 偏特化 3. 模版的分离和编译4. 总结 1. 模版参数 模版参数分为类型形参和非类型参数之前我们写过的大量代码&#xff0c;都是用模版定义类的参数类型&#xff0c;跟在class和typena…

黑阈免激活版:智能管理后台,优化手机性能

在使用安卓手机的过程中&#xff0c;许多用户会遇到手机卡顿、电池续航不足等问题。这些问题通常是由于后台运行的应用程序过多&#xff0c;占用大量系统资源导致的。今天&#xff0c;我们要介绍的 黑阈免激活版&#xff0c;就是这样一款由南京简域网络科技工作室开发的手机辅助…

Mujoco robosuite 机器人模型

import ctypes import os# 获取当前脚本所在的目录 script_dir os.path.dirname(os.path.abspath(__file__))# 构建库文件的相对路径 lib_relative_path os.path.join(dynamic_models, UR5e, Jb.so)# 拼接成完整的路径 lib_path os.path.join(script_dir, lib_relative_path…

K8s:概念、特点、核心组件与简单应用

一、引言 在当今云计算和容器技术蓬勃发展的时代&#xff0c;Kubernetes&#xff08;简称 K8s&#xff09;已成为容器编排领域的事实标准。它为管理容器化应用提供了高效、可靠的解决方案&#xff0c;极大地简化了应用的部署、扩展和运维过程。无论是小型初创公司还是大型企业…

STM32的定时器输出PWM时,死区时间(DTR)如何计算

在 STM32F429&#xff08;以及所有 STM32F4 “高级定时器”&#xff09;中&#xff0c;死区时间由 TIMx_BDTR 寄存器的 8 位 “Dead‑Time Generator” 字段 DTG[7:0] 来配置。其计算分三步&#xff1a; 计算死区时钟周期 tDTS TIM1 时钟源为 APB2 定时器时钟&#xff08;PCL…

STC32G12K128单片机GPIO模式SPI操作NorFlash并实现FatFS文件系统

STC32G12K128单片机GPIO模式SPI操作NorFlash并实现FatFS文件系统 NorFlash简介NorFlash操作驱动代码文件系统测试代码 NorFlash简介 NOR Flash是一种类型的非易失性存储器&#xff0c;它允许在不移除电源的情况下保留数据。NOR Flash的名字来源于其内部结构中使用的NOR逻辑门。…