Day28下 - 大模型微调:酒店评论情感分析
一、前置准备
1. 下载 LLaMA Factory
https://github.com/hiyouga/LLaMA-Factory.git
搭建过程详见:https://blog.csdn.net/CSBLOG/article/details/144584581
2. 选择 预训练模型 和 prompt指令模型
预训练阶段在实际工作中,一般是用不上的,但我们可以学习了解。为了方便节省资源,我们可以先选个小点的模型试一试。
这里预训练模型选择 通义千问2.5-0.5B-预训练 ,指令模型选择 Qwen2.5-0.5B-Instruct
3. 下载 预训练模型 和 指令模型
下载预训练模型:
git clone https://www.modelscope.cn/Qwen/Qwen2.5-0.5B.git
下载指令模型:
git clone https://www.modelscope.cn/Qwen/Qwen2.5-0.5B-Instruct.git
4. 打开 LLaMA Factory 的webui,修改参数
(1)查看并确保 模型名称 和 模型路径 是否正确
(2)选择推理引擎,实际工作中一般选择 vllm
(3)按需决定是否还需要调整其他参数
5. 对话测试
二、数据处理
1. 数据集构建
通过查看 LLaMA-Factory/data/README_zh.md 文件可知,它需要什么样的数据。
先找一小段文本尝试一下
import jsontexts = """
1.流行性感冒:流行性感冒潜伏期多为1~7天,临床表现主要以发热(体温可达39~40℃)、头痛、肌痛和全身不适起病。除了全身症状,常有咽喉痛、干咳,可有鼻塞、流涕、胸骨后不适等。部分有呕吐、腹痛、腹泻等消化道症状。流感病原学检测阳性。
2.过敏性鼻炎:有过敏史,常年打喷嚏和流涕,鼻黏膜苍白伴有瘙痒感,鼻分泌物内嗜酸粒细胞增加等。
3.萎缩性鼻炎:大多是鼻腔通畅,鼻和鼻咽部干燥,鼻分泌物为块状、管筒状脓痂,伴有呼气恶臭、嗅觉减退等症状。
4.血管舒缩性鼻炎:无过敏史,常出现鼻黏膜间歇性血管充盈、打喷嚏和流清涕,吸入干燥空气后症状加重。
5.上呼吸道感染性疾病:如细菌性咽-扁桃体炎,疱疹性咽峡炎等均有其病变部位的特异性体征。前者有咽部充血,扁桃体肿大,表面有脓性分泌物等;后者软腭、咽和扁桃体表面有灰白色疱疹和浅表溃疡伴周围红晕。
"""samples = []
for text in texts.split("\n"):if text: # 检查行是否非空sample = dict(text=text) # 创建一个字典,键为 'text',值为当前行的文本samples.append(sample) # 将字典添加到 samples 列表中
运行结果:
保存数据
with open(file="samples.json", mode="w", encoding="utf8") as f:json.dump(obj=samples, fp=f, ensure_ascii=False)
运行后,会在当前目录下生成 samples.json 文件。
想要在 LLaMA-Factory webui 的数据集中显示,还需要参照 README_zh.md 文件中的方式进行注册,因为它是通过dataset_info.json文件去找相关的数据。
再回到 LLaMA Board,即可看到我们新增的数据集
按需添加数据集,然后就可以开始训练了
数据太少,训练没啥效果,接下来,我们用之前酒店评论情感分析的数据集作为示例
2. 数据切分
import pandas as pddata = pd.read_csv(filepath_or_buffer="samples.tsv", sep="\t", encoding="utf8")data = data.sample(frac=1)data.reset_index(drop=True, inplace=True)# 包含 stop [start, stop]
train = data.loc[1500:, :]
test = data.loc[:1499, :]print(train.shape)
print(test.shape)train.to_csv(path_or_buf="train.tsv", sep="\t", index=None)
test.to_csv(path_or_buf="test.tsv", sep="\t", index=None)
3. 数据格式转换
import pandas as pd
import json
from pprint import ppdata = pd.read_csv(filepath_or_buffer="train.tsv", sep="\t", encoding="utf8")num_samples, num_features = data.shaperesults = []
sys_prompt = """
你是一个情感识别专家!请对用户输入的酒店评论做情感分析!
如果是正面的评论,请输出:
{"sentiment": "正面"
},
如果是负面的评论,请输出:
{"sentiment": "负面"
}
"""
user_instruction = '{input}'for idx in range(num_samples):comment, sentiment = data.loc[idx, :]# print(comment, sentiment)result = {"instruction": comment,"input": "","output": '{"sentiment": "' + sentiment + '"}',"system": sys_prompt}# pp(result)results.append(result)print(results)
type()print(results[1000]["system"])print(results[1000]["instruction"])print(results[1000]["input"])print(results[1000]["output"])with open(file="sentiments.json", mode="w", encoding="utf8") as f:json.dump(obj=results, fp=f, ensure_ascii=False)
运行成功后,会自动生成 sentiments.json 文件。
(1)将 sentiments.json 文件移动到 LLaMA-Factory/data目录下;
(2)在 LLaMA-Factory/data/dataset_info.json文件里进行注册;
三、微调
1. 修改模型的自我认知
修改 LLaMA-Factory/data/identity.json 文件,将 {{name}} 和 {{author}}分别替换成你需要的名字。
2. 回到 LLaMA Board 页面,选择数据集,微调时,一般选择三类数据。
(1)自我认知(每个项目是必改的,修改identity)
(2)私有数据(针对你的具体任务,需要设计指定格式,转换自己的数据)
(3)公开数据(框架自带)
所以这里的数据集可以选择 identity, sentiment , alpaca_zh_demo,alpaca_en_demo 。
3. 确保模型的路径正确。
4. 小模型,算力足,可以选择 full 全参。再调一下训练轮数、批处理大小、保存间隔可以调大一些, 日志可以改小一点,不需要打那么多日志,其他基本不怎么需要修改,即可开始炼丹啦。
四、多机多卡
1. 打开算力平台,选择多台机器
https://www.autodl.com/login
选了3台机器
2. 下载相关模型文件,操作步骤跟前面差不多。
(1)下载 LLaMA Factory 、下载Qwen模型。
(2)将前面修改好的 identity.json, sentiments.json, dataset_info.json 文件上传过来替换掉。
3. 监控显存
刚开始不要弄的太复杂。打开终端,切换到LLaMA Factory根目录下,输入以下命令:
# 监控显存
watch -n 1 'nvidia-smi'
可以看到目前3张卡都是空的。
4. 修改相关配置文件
参考 LLaMA Factory 说明文档
https://llamafactory.readthedocs.io/zh-cn/latest/advanced/distributed.html
FORCE_TORCHRUN=1,是True的意思,也就是直接用torch来启动。
train examples/train_full/llama3_full_sft_ds3.yaml 配置文件
(1)找到 LLaMA-Factory/examples/train_full 目录编辑
(2)将该目录下的 llama3_full_sft.yaml 配置文件复制到 autodl 平台的 LLaMA-Factory 目录下,再重命名为: Qwen2.5_0.5B_Instruct_full_sft.yaml
(3)修改Qwen2.5_0.5B_Instruct_full_sft.yaml 文件内容
(4)autodl 平台终端,安装 deepspeed
pip install deepspeed
(5)autodl 平台终端,切换到 LLaMA-Factory 根目录下,输入命令
# 并行训练
FORCE_TORCHRUN=1 llamafactory-cli train QWen2.5_0.5B_Instruct_full_sft.yaml
可以看到,3张卡开始使用了 。
接下来,查看训练结果。
5. 模型微调
(1)启动 LLaMA-Factory(LLaMA Board 可视化微调),终端输入以下命令
llamafactory-cli webui
(2)在 LLaMA Board 可视化微调界面,将模型路径替换为刚才训练成果的路径。
(3)加载模型
(4)检验成果
先粗糙的试一下,看自我认知是否已经修改好;再进行公共知识和私有知识的提问,看回答问题的质量如何。
(5)考试,来测试训练后的模型效果
modelscope 和 antodl 两个平台的终端分别都切换到LLaMA-Factory的根目录下,输入以下命令:
# 模型测评
CUDA_VISIBLE_DEVICES=0 llamafactory-cli eval \
--model_name_or_path /root/autodl-tmp/outputs/Qwen2.5-0.5B-Instruct \
--template qwen \
--task cmmlu_test \
--lang zh \
--n_shot 5 \
--batch_size 4 \
--trust_remote_code True
其中,model_name_or_path 是之前训练后生成的模型路径
modelscope考试结果:
Average只有32,说明模型微调后,综合能力降低了。
training loss :
autodl 平台考试情况:
6. autodl 平台操作
(1)打开autodl 终端,输入以下命令,安装vllm
pip install vllm
(2)减配卡(训练的时候尽量多张卡,训练完成后可以只用一张卡)
(3)将之前写的情感识别任务的代码上传到autodl平台上,修改模型路径;
(4)autodl 终端,进入LLaMA-Factory的根目录下,输入以下命令:
CUDA_VISIBLE_DEVICES=0 llamafactory-cli eval \
--model_name_or_path /root/autodl-tmp/outputs/Qwen2.5-0.5B-Instruct \
--template qwen \
--task cmmlu_test \
--lang zh \
--n_shot 5 \
--batch_size 4 \
--trust_remote_code True
运行第一轮:
运行第二轮:
7. 部署API服务
部署神器 vllm ,参考文档:
https://blog.vllm.ai/2023/06/20/vllm.html
# 模型部署
python -m vllm.entrypoints.openai.api_server \
--host 0.0.0.0 \
--port 6006 \
--model Qwen2.5-0.5B-Instruct \
--api-key abc123 \
--enable-auto-tool-choice \
--tool-call-parser hermes
五、大模型上层开发
上层开发在本地操作即可,接下来使用本地 jupyter 操作。
上层开发有3件事:
- prompt 开发
- RAG 系统
- Agent
from langchain_openai import ChatOpenAImodel = ChatOpenAI(base_url=base_url,api_key=api_key,model=model,max_tokens=512,temperature=0.1,top_p=0.3)
1. 大模型调用方法
"""callinvoke
"""
response = model.invoke(input="你是谁?")# 文本内容
response.contentresponse.response_metadata["token_usage"]response.response_metadata["finish_reason"]
2. stream
response = model.stream(input="你好")for chunk in response:print(chunk.content)
3. 批量推理
queries = ["你好", "你吃饭了吗?", "一起去打球吧"]responses = model.batch(inputs=queries)len(responses)responses
4. 输入部分
# system
from langchain_core.messages import SystemMessage
# user
from langchain_core.messages import HumanMessage
# assistant
from langchain_core.messages import AIMessagemessages = [SystemMessage(content="""你是一个情感识别专家!请对用户输入的酒店评论做情感分析!如果是正面的评论,请输出:{"sentiment": "正面"},如果是负面的评论,请输出:{"sentiment": "负面"}"""),HumanMessage(content="刚从无锡回来,住了该酒店二号楼328YUAN的,总体感觉如下;房间干净,配制齐全还有液镜电脑;饭菜可口且不是很贵;最值得称赞的是服务水准,老公粗心大意把手机掉了,工作人员捡后马上送回,赞了!饭店的员工几乎都是笑脸相迎,很难得,单从这点就间接提升了入住该饭店的理由!")
]messagesresponse = model.invoke(input=messages)response.contentimport json
json.loads(s=response.content)
LangChain
- 输入预处理
- 大模型
- 后处理
from langchain_core.prompts import SystemMessagePromptTemplate
from langchain_core.prompts import HumanMessagePromptTemplate
from langchain_core.prompts import ChatPromptTemplatesys_prompt = SystemMessagePromptTemplate.from_template(template="""
你是一个情感识别专家!请对用户输入的酒店评论做情感分析!
如果是正面的评论,请输出:
{{"sentiment": "正面"
}},
如果是负面的评论,请输出:
{{"sentiment": "负面"
}}
""")user_prompt = HumanMessagePromptTemplate.from_template(template="{text}")prompt = ChatPromptTemplate.from_messages(messages=[sys_prompt, user_prompt])promptmodel
from langchain_core.output_parsers import StrOutputParser
output_parser = StrOutputParser()chain = prompt | model | output_parsertext = "刚从无锡回来,住了该酒店二号楼328YUAN的,总体感觉如下;房间干净,配制齐全还有液镜电脑;饭菜可口且不是很贵;最值得称赞的是服务水准,老公粗心大意把手机掉了,工作人员捡后马上送回,赞了!饭店的员工几乎都是笑脸相迎,很难得,单从这点就间接提升了入住该饭店的理由!"chain.invoke(input={"text": text})
import pandas as pddata = pd.read_csv(filepath_or_buffer="test.tsv", sep="\t", encoding="utf8")num_samples, num_features = data.shapefrom tqdm import tqdmresults = []
for idx in tqdm(range(num_samples)):comment, sentiment = data.loc[idx, :]result = chain.invoke(input={"text": comment})try:result = json.loads(s=result)except Exception as ex:print(result)results.append(result["sentiment"] == sentiment)sum(results) / len(results)
相关文章:
Day28下 - 大模型微调:酒店评论情感分析
一、前置准备 1. 下载 LLaMA Factory https://github.com/hiyouga/LLaMA-Factory.git 搭建过程详见:https://blog.csdn.net/CSBLOG/article/details/144584581 2. 选择 预训练模型 和 prompt指令模型 预训练阶段在实际工作中,一般是用不上的ÿ…...
企业级Nosql数据库和Redis集群
一、关系数据库和Nosql数据库 关系数据库 定义:关系数据库是建立在关系模型基础上的数据库。它使用表格(关系)来存储数据,通过行和列的形式组织信息。例如,一个简单的学生信息表可能有 “学号”“姓名”“年龄”“班级…...
代码优化方案
① 引入清晰的中间变量 即如果判断条件很复杂的情况下,最好的方式是引入清晰的中间变量。 isValid val > someConstant; isAllowed condition2 || condition3; isSecure condition4 && !condition5;// 有了描述性变量,我们就不需要再记住…...
C++直接内存管理new和delete
0、前言 C语言定义了两个运算符来分配和释放动态内存。运算符new分配内存,delete释放new分配的内存。 1、new动态内存的分配 1.1、new动态分配和初始化对象 1)、new内存分配 在自由的空间分配的内存是无名的,new无法为其分配的对象…...
CPU过剩是什么意思? 有什么对电脑的影响吗?如何确认CPU有没有过剩
CPU 过剩通常是指计算机系统中 CPU 的性能远远超出了当前运行任务的需求。以下从产生原因和对电脑的影响为你详细介绍: 产生原因 硬件升级与软件发展不同步:用户为追求高性能提前升级了 CPU,而当前的软件应用程序在算法和功能上没有太大突破&…...
Git的简单介绍与如何安装Git
文章目录 前言一、初始git1.git是什么2.为什么要使用git(出现的问题)3.git是如何解决问题的 二、git的安装与卸载1.centos系统2.ubuntu系统3.windows 三、搭建git本地环境1.创建git本地仓库2.配置用户信息 总结 前言 本文简单引入git的相关内容。 一、初始git 1.git是什么 g…...
Linux vi/vim 编辑器:功能强大的文本处理工具
Linux vi/vim 编辑器:功能强大的文本处理工具 引言 Linux 系统中的 vi/vim 是一种功能强大的文本编辑器,它广泛应用于程序员、系统管理员和其他需要处理文本文件的用户群体中。vi 是 visual interface 的缩写,而 vim 则是 vi improved 的缩…...
计算机毕业设计Python电商品推荐系统 商品比价系统 电商比价系统 商品可视化 商品爬虫 机器学习 深度学习 京东爬虫 国美爬虫 淘宝爬虫 大数据
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
正则表达式 - 使用总结
正则表达式 - 使用总结 正则表达式(Regular Expression,简称Regex)是一种强大的文本处理工具,它允许我们通过特定的模式(pattern)来搜索、匹配和操作字符串。在编程、数据分析和文本处理等领域,正则表达式发挥着非常重要的作用。本文将总结正则表达式的基本概念、使用方…...
性能测试04|JMeter:连接数据库、逻辑控制器、定时器
目录 一、连接数据库 1、使用场景 2、直连数据库的关键配置 3、案例 编辑 二、逻辑控制器 1、if控制器 2、循环控制器 3、ForEach控制器 三、定时器 1、同步定时器 2、常数吞吐量定时器(用的少,了解即可) 3、固定定时器 一、连…...
力扣刷题:二叉树OJ篇(上)
大家好,这里是小编的博客频道 小编的博客:就爱学编程 很高兴在CSDN这个大家庭与大家相识,希望能在这里与大家共同进步,共同收获更好的自己!!! 目录 1.单值二叉树(1)题目描…...
【跨域】解决SpringBoot和openresty跨域问题
平时后端只需要写一个配置类就可以解决跨域但是最近的新项目死活不行 先说结论 项目中的权限校验(也可以是其他的)拦截器优先级高于跨域拦截器导致跨域处理失效 解决办法 1.在addCorsMappings上增加 Order(value -100)// 跨域优先级最高 2.nginx放行OPTIONS请求 SpringBo…...
下载ffmpeg执行文件
打开网址:Download FFmpeg 按下面步骤操作 解压文件就可以看到ffmpeg的执行文件了,需要通过命令行进行使用: ffmpeg命令行使用参考: ffmpeg 常用命令-CSDN博客...
SQLite 实际案例研究与创新应用
SQLite 作为一种强大而简单的数据库实现,应用于各类场景,从移动应用到物联网设备,再到边缘计算。在本章中,我们将通过几个典型案例,探讨 SQLite 如何在实际中解决复杂问题,并研究其创新应用的可能性。 案例…...
C语言 递归编程练习
1.将参数字符串中的字符反向排列,不是逆序打印。 要求:不能使用C函数库中的字符串操作函数。 比如: char arr[] "abcdef"; 逆序之后数组的内容变成:fedcba 1.非函数实现(循环) 2.用递归方法…...
【HDU】1089 A+B for Input-Output Practice (I)
1089 AB for Input-Output Practice (I):以EOF结尾的输入 Problem Description Your task is to Calculate a b. Too easy?! Of course! I specially designed the problem for acm beginners. You must have found that some problems have the same titles with this one,…...
[python3]Excel解析库-xlwings
xlwings 是一个强大的 Python 库,它允许你直接与 Microsoft Excel 进行交互。通过 xlwings,你可以轻松地在 Python 脚本或 Jupyter Notebook 中读取、写入和操作 Excel 文件,而无需手动打开 Excel 应用程序。此外,xlwings 还支持将…...
[python3]Excel解析库-xlutils
xlutils 是一组用于处理 Excel 文件的 Python 库,它实际上是 xlrd 和 xlwt 的扩展,提供了额外的功能来操作 Excel 文件。xlutils 主要由三个部分组成:xlutils.copy、xlutils.filter 和 xlutils.view,它们分别用于复制和修改现有 E…...
React中的合成事件
合成事件与原生事件 区别: 1. 命名不一样,原生用纯小写方式,react用小驼峰的方式 原生:onclick React的:onClick 2. 事件处理函数的写法不一样 原生的是传入一个字符串,react写法传入一个回调函数 3.…...
记录一次电脑被入侵用来挖矿的过程(Trojan、Miner、Hack、turminoob)
文章目录 0、总结1、背景2、端倪3、有个微软的系统更新,就想着更新看看(能否冲掉问题)4、更新没成功,自动重启电脑5、风险文件(好家伙命名还挺规范,一看名字就知道出问题了)6、开机有一些注册表…...
牛客网刷题 ——C语言初阶(5操作符)——BC107 矩阵转置
1.题目描述:BC107 矩阵转置 牛客网OJ链接 KiKi有一个矩阵,他想知道转置后的矩阵(将矩阵的行列互换得到的新矩阵称为转置矩阵),请编程帮他解答。 输入描述: 第一行包含两个整数n和m,表示一个矩阵包含n行m列…...
【调试记录】在CARLA中插入可以播放视频的组件
〇、问题描述 做实验验证的时候,需要在CARLA仿真环境中添加一个可以播放视频的功能,查了很多现有的实验,基本都是插入图像,而对于插入视频,实现的方法就很麻烦了。一开始考虑的是直接用射影变换进行叠加,计…...
【Linux】RPMSG通讯协议介绍
RPMSG协议通讯协议介绍 RPMSG,全称Remote processor Messaging。是一种核间通讯协议。在Linux Kernel中,已经内置了RPMSG。 Linux RPMSG基于共享内存,利用RPMSG可以高效的实现核间通信。比如Linux与FreeRTOS、Linux与Android,都可…...
Branch-Solve-Merge Improves Large Language Model Evaluation and Generation
题目 分支-求解-合并改进了大型语言模型的评估和生成 摘要 大型语言模型(LLM)经常用于多方面的语言生成和评估任务,这些任务涉及满足复杂的用户约束或考虑多个方面和标准。然而,由于模型缺乏一致性,无法计划和分解问题,他们的表现…...
SqlSugar-文章目录
SqlSugar学习总结1(基础操作) SqlSugar学习总结2(主从复制-数据库配置) SqlSugar学习总结3(主从复制-读写分离) SqlSugar学习总结4(树形递归查询) SqlSugar学习总结5(映射)...
如何理解RDD,以及RDD的五大特性和五大特点。
RDD:英文全称Resilient Distributed Dataset,叫做弹性分布式数据集,代表一个不可变、可分区、里面的元素可并行计算的分布式的抽象的数据集合。 Resilient弹性:RDD的数据可以存储在内存或者磁盘当中,RDD的数据可以分区…...
umd格式
umd格式是啥? umd格式是一种通用模块,他同时支持AMD、CJS、ESM模块和全局变量的方式 umd格式打包后的基本代码结构如下: (function (root, factory) {if (typeof define function && define.amd) {// AMDdefine([dependency], factory);} el…...
node.js之---内置模块
在 Node.js 中,模块系统是基于 CommonJS 模块规范 的,这使得开发者可以将代码分成多个独立的模块进行管理。Node.js 提供了很多 内置模块(也称为 核心模块),这些模块可以直接在代码中使用,而无需安装额外的…...
linux下安装达梦数据库v8详解
目录 操作系统、数据库 1、下载达梦数据库 2、安装前准备 2.1、建立数据库用户和组 2.2、修改文件打开最大数 2.3、挂载镜像 2.4、新建安装目录 3、数据库安装 4、配置环境变量 5、初始化数据库实例 6、注册服务 7、使用数据库 8、卸载数据库 9、多实例管理 10、…...
深入理解 Android 中的 ApplicationInfo
深入理解 Android 中的 ApplicationInfo 在 Android 开发中,ApplicationInfo 是一个非常重要的类,它包含了关于应用程序的元信息。这些信息通常是从 AndroidManifest.xml 文件中提取的,开发者可以通过 ApplicationInfo 类来获取和操作这些信…...
【vLLM】使用PagedAttention 进行大型语言模型的高效内存管理
重磅推荐专栏: 《大模型AIGC》 《课程大纲》 《知识星球》 本专栏致力于探索和讨论当今最前沿的技术趋势和应用领域,包括但不限于ChatGPT和Stable Diffusion等。我们将深入研究大型模型的开发和应用,以及与之相关的人工智能生成内容(AIGC)技术。通过深入的技术解析和实践经…...
STLG_01_12_程序设计C语言 - 联合体和枚举类型
在C语言中,联合体(Union)和枚举类型(Enum)是两种不同的数据结构,它们各自有特定的用途和特点。 联合体(Union) 联合体是一种数据结构,允许在相同的内存位置存储不同的数…...
ThreadLocal详解:深入探讨导致JVM内存泄露的原因及预防措施
引言 ThreadLocal 是Java提供的一个线程局部变量工具,它使得每个线程都可以拥有自己的变量副本,而这些副本对于其他线程而言是不可见的。这在多线程编程中非常有用,因为它可以避免共享资源带来的同步问题。然而,如果使用不当&…...
【FlutterDart】 拖动改变 widget 的窗口尺寸大小GestureDetector~简单实现(10 /100)
上效果 预期的是通过拖动一条边界线改变窗口大小,类似vscode里拖动效果。这个是简单的拖动实现 上代码: import package:flutter/material.dart;class MyDraggableViewDemo extends StatelessWidget {const MyDraggableViewDemo({super.key});override…...
【FlutterDart】 拖动边界线改变列宽并且有边界高亮和鼠标效果(12 /100)
【Flutter&Dart】 拖动改变 widget 的窗口尺寸大小GestureDetector~简单实现(10 /100) 【Flutter&Dart】 拖动边界线改变列宽类似 vscode 那种拖动改变编辑框窗口大小(11 /100) 上效果 对比一下vscode的效果&…...
鸿蒙应用开发(2)
鸿蒙应用开发启航计划-CSDN博客 鸿蒙应用开发(1)-CSDN博客 没看过前两篇的,建议请先看上面。 如果你学习完了前两篇,那么你学习这篇文章,就很容易理解了。 这一篇文章将介绍声明式UI的 渲染控制。你需要了解的是&…...
js -动态主题色
学习参考来源: 峰华大佬:https://www.bilibili.com/video/BV1E64y1Z79Q/?spm_id_from333.1391.0.0&vd_sourcea0f31140205458776d3a4ef477cd6561 实际效果: http://www.qingkong.zone/laboratory?typetheme-color 前言 本文内容可结合上…...
connect to host github.com port 22: Connection timed out 的解决方法
原因是 Github 被 GFW 屏蔽了。 Windows 系统,打开 C:\Windows\System32\drivers\etc,复制其中的 hosts 文件至桌面,用文本编辑器或者其他工具打开。 复制以下内容进去: 140.82.114.4 github.com 151.101.1.6 github.global.ss…...
AI 角色扮演法的深度剖析与实践
📢📢📢 大家好,我是云楼Yunlord,CSDN博客之星人工智能领域前三名,多年人工智能学习工作经验,一位兴趣稀奇古怪的【人工智能领域博主】!!!😜&#…...
ansible-动态inventory及内置函数
一. 简述: 关于inventory的基本用法可以参考上一篇文章:ansible-inventory定义-CSDN博客 在实际线上环境中,单纯的靠配置文件管理,是一件很麻烦的事情(比如一致性问题),特别是规模较大的场景下,会有大量主…...
【每日学点鸿蒙知识】广告ID、NFC手机充值、CSS支持语法、PC与模拟器交互、SO热更新等
1、HamonyOS 样机获取成功返回Oaid为00000000-0000-0000-0000-000000000000? 请求授权时需要触发动态授权弹窗,看一下是不是没有触发授权弹窗。 可以参考以下代码以及文档: // ets import identifier from ohos.identifier.oaid; import hilog from oh…...
MySQL 【多表查询】
一 . 概述 多表关系: 一对多(多对一) , 多对多 ,一对一 1) 一对一 案例: 用户 与 用户详情的关系 关系: 一对一关系,多用于单表拆分,将一张表的基础字段放在一张表中,其他详情字段放在另 一张表…...
第08章 存储管理(二)
一、EXT4文件系统详解 1.1 简介 1.1.1 课程引入 1.1.2 名词解释 1.1.3 类型 索引(index)文件系统 1.1.4 系统限制 1.1.5 图示 1.1.6 名词 1.2 inode(index node 索引节点) 1.3 block(块 文件内容) 二、文件链接 2.1 符号连接(软连接) 2.…...
win10搭建zephyr开发环境
搭建环境基于 zephyr官方文档 基于官方文档一步一步走很快就可以搞定 一、安装chocolatey 打开官网 https://community.chocolatey.org/courses/installation/installing?methodinstall-from-powershell-v3 1、用管理员身份打开PowerShell (1)执行 …...
常见框架漏洞
一:ThinkPhp 1.搭建环境,访问 2.访问路径,进行远程代码执行 二:struts2 1.搭建环境进行 2.使用工具进行检测 三:Spring 1.搭建环境进行访问并进行抓包 2.然后抓取数据包,使用PATCH请求来修改 3.进入容器…...
党员学习交流平台
本文结尾处获取源码。 本文结尾处获取源码。 本文结尾处获取源码。 一、相关技术 后端:Java、JavaWeb / Springboot。前端:Vue、HTML / CSS / Javascript 等。数据库:MySQL 二、相关软件(列出的软件其一均可运行) I…...
公司资产网站
本文结尾处获取源码。 本文结尾处获取源码。 本文结尾处获取源码。 一、相关技术 后端:Java、JavaWeb / Springboot。前端:Vue、HTML / CSS / Javascript 等。数据库:MySQL 二、相关软件(列出的软件其一均可运行) I…...
线上go内存泄漏分析实战
背景 最近经常发现web服务内存占用持续缓慢增高,从图像上看是基本持续递增,但偶尔也有下降趋势(不会下降很明显),对比30天以前没那么高内存占用,最近30天内存占用变化且无明显规律。WEB服务框架是echo框架&…...
UE5AI感知组件
官方解释: AI感知系统为Pawn提供了一种从环境中接收数据的方式,例如噪音的来源、AI是否遭到破坏、或AI是否看到了什么。 AI感知组件(AIPerception Component)是用于实现游戏中的非玩家角色(NPC)对环境和其…...
12306购票如何做到限流的,什么技术方案,mq吗,提示排队过多,请稍微重试,提示库存不足。具体实现细节是怎么样的
12306(中国铁路客户服务中心)的购票系统是一个典型的高并发、高流量的系统。在春运和节假日等高峰期间,购票需求量极大,用户的请求频繁且集中,系统必须通过多种技术手段来进行 限流 和 负载均衡,确保购票服…...