【大模型实战篇】使用GPTQ量化QwQ-32B微调后的推理模型
1. 量化背景
之所以做量化,就是希望在现有的硬件条件下,提升性能。量化能将模型权重从高精度(如FP32)转换为低精度(如INT8/FP16),内存占用可减少50%~75%。低精度运算(如INT8)在GPU等硬件上计算效率更高,推理速度可提升2~4倍。
我们的任务是,将QwQ-32B微调后的推理模型,也就是bf16的精度,通过量化,压缩到int4。关于QwQ-32B微调,可以参考《利用ms-swift微调框架对QwQ-32B推理模型进行微调》。关于推理模型吞吐性能对比,可以参考《对比包括QwQ-32B在内的不同推理模型的吞吐量表现》。
2. 量化流程
接下来进入量化介绍:
QwQ-32B的模型架构依然还是Qwen2系列,所以可以使用GPTQ进行量化。之前尝试用AWQ,会报错。下列内容是基于AutoGPTQ实现量化。
首先通过安装源代码的方式获取并安装最新版本的该软件包。
git clone https://github.com/AutoGPTQ/AutoGPTQ
cd AutoGPTQ
pip install -e .
假设基于QwQ-32B模型进行微调,并将该微调后的模型命名为 QwQ-32B-finetuned ,且使用的是自己的带推理链的数据集。要构建GPTQ量化模型,还需要使用训练数据进行校准。
这里校准数据的设置,最好配置参数damp_percent=0.1,然后我采用的校准样本量是128个sample。不然会报错【1】:
torch._C._LinAlgError: linalg.cholesky: The factorization could not be completed because the input is not positive-definite
在我的场景中,damp_percent我设置0.01,通过调整校准样本量解决了该报错。
我们采用双卡进行量化,脚本如下:
from auto_gptq import AutoGPTQForCausalLM, BaseQuantizeConfig
from transformers import AutoTokenizer
import torch
import json# 设置路径
model_path = "/data/QwQ-32B-finetuned"
quant_path = "/data/quantized_model"# 设置量化配置
quantize_config = BaseQuantizeConfig(bits=4, # 可选择4或8位量化group_size=128,damp_percent=0.01,desc_act=False, # 为了加速推理,可将其设置为False,但可能会导致困惑度稍差static_groups=False,sym=True,true_sequential=True,model_name_or_path=None,model_file_base_name="model"
)max_len = 8192 # 设置最大文本长度# 加载tokenizer
tokenizer = AutoTokenizer.from_pretrained(model_path)# 加载模型,并指定使用GPU 2和GPU 5
model = AutoGPTQForCausalLM.from_pretrained(model_path,quantize_config,max_memory={2: "80GB", 5: "80GB"} # 使用GPU 2和GPU 5,各分配80GB显存
)# 准备校准数据集
data = []
with open("/data/jz_v0303.jsonl", "r") as f:for line in f:msg = json.loads(line)text = tokenizer.apply_chat_template(msg["messages"], tokenize=False, add_generation_prompt=False)model_inputs = tokenizer([text])input_ids = torch.tensor(model_inputs.input_ids[:max_len], dtype=torch.int)data.append(dict(input_ids=input_ids, attention_mask=input_ids.ne(tokenizer.pad_token_id)))# 运行量化过程
import logginglogging.basicConfig(format="%(asctime)s %(levelname)s [%(name)s] %(message)s", level=logging.INFO, datefmt="%Y-%m-%d %H:%M:%S"
)
model.quantize(data, cache_examples_on_gpu=False)# 保存量化后的模型
model.save_quantized(quant_path, use_safetensors=True)
tokenizer.save_pretrained(quant_path)
量化日志:
QwQ有64层transformer层,整个量化共花费约110分钟。
Loading checkpoint shards: 100%|██████████| 14/14 [00:24<00:00, 1.74s/it]
INFO - Start quantizing layer 1/64
INFO - Quantizing self_attn.k_proj in layer 1/64...
2025-03-16 13:08:27 INFO [auto_gptq.quantization.gptq] duration: 4.176503658294678
2025-03-16 13:08:27 INFO [auto_gptq.quantization.gptq] avg loss: 4.942690849304199
INFO - Quantizing self_attn.v_proj in layer 1/64...
2025-03-16 13:08:28 INFO [auto_gptq.quantization.gptq] duration: 1.400636911392212
2025-03-16 13:08:28 INFO [auto_gptq.quantization.gptq] avg loss: 1.4266357421875
INFO - Quantizing self_attn.q_proj in layer 1/64...
2025-03-16 13:08:30 INFO [auto_gptq.quantization.gptq] duration: 1.4035542011260986
2025-03-16 13:08:30 INFO [auto_gptq.quantization.gptq] avg loss: 14.252044677734375
INFO - Quantizing self_attn.o_proj in layer 1/64...
2025-03-16 13:08:35 INFO [auto_gptq.quantization.gptq] duration: 1.4259772300720215
2025-03-16 13:08:35 INFO [auto_gptq.quantization.gptq] avg loss: 21.492481231689453
INFO - Quantizing mlp.up_proj in layer 1/64...
2025-03-16 13:08:42 INFO [auto_gptq.quantization.gptq] duration: 1.4980144500732422
2025-03-16 13:08:42 INFO [auto_gptq.quantization.gptq] avg loss: 11.520009994506836
INFO - Quantizing mlp.gate_proj in layer 1/64...
2025-03-16 13:08:43 INFO [auto_gptq.quantization.gptq] duration: 1.4689013957977295
2025-03-16 13:08:43 INFO [auto_gptq.quantization.gptq] avg loss: 13.158416748046875
INFO - Quantizing mlp.down_proj in layer 1/64...
2025-03-16 13:09:36 INFO [auto_gptq.quantization.gptq] duration: 11.233691692352295
2025-03-16 13:09:36 INFO [auto_gptq.quantization.gptq] avg loss: 5.198782444000244
INFO - Start quantizing layer 2/64
INFO - Quantizing self_attn.k_proj in layer 2/64...
2025-03-16 13:09:50 INFO [auto_gptq.quantization.gptq] duration: 1.4270472526550293
2025-03-16 13:09:50 INFO [auto_gptq.quantization.gptq] avg loss: 0.25423723459243774
INFO - Quantizing self_attn.v_proj in layer 2/64...
2025-03-16 13:09:51 INFO [auto_gptq.quantization.gptq] duration: 1.377784252166748
2025-03-16 13:09:51 INFO [auto_gptq.quantization.gptq] avg loss: 0.12605950236320496
INFO - Quantizing self_attn.q_proj in layer 2/64...
2025-03-16 13:09:53 INFO [auto_gptq.quantization.gptq] duration: 1.3954062461853027
2025-03-16 13:09:53 INFO [auto_gptq.quantization.gptq] avg loss: 0.6923567056655884
INFO - Quantizing self_attn.o_proj in layer 2/64...
2025-03-16 13:09:58 INFO [auto_gptq.quantization.gptq] duration: 1.4187729358673096
2025-03-16 13:09:58 INFO [auto_gptq.quantization.gptq] avg loss: 0.21527329087257385
INFO - Quantizing mlp.up_proj in layer 2/64...
2025-03-16 13:10:05 INFO [auto_gptq.quantization.gptq] duration: 1.4918739795684814
2025-03-16 13:10:05 INFO [auto_gptq.quantization.gptq] avg loss: 42.98908615112305
INFO - Quantizing mlp.gate_proj in layer 2/64...
2025-03-16 13:10:07 INFO [auto_gptq.quantization.gptq] duration: 1.4632303714752197
2025-03-16 13:10:07 INFO [auto_gptq.quantization.gptq] avg loss: 254.09523010253906
INFO - Quantizing mlp.down_proj in layer 2/64...
2025-03-16 13:10:59 INFO [auto_gptq.quantization.gptq] duration: 11.405533790588379
2025-03-16 13:10:59 INFO [auto_gptq.quantization.gptq] avg loss: 1.4062278270721436
INFO - Start quantizing layer 3/64.......
2025-03-16 14:33:08 INFO [auto_gptq.quantization.gptq] duration: 11.416744709014893
2025-03-16 14:33:08 INFO [auto_gptq.quantization.gptq] avg loss: 10015.05078125
INFO - Start quantizing layer 62/64
INFO - Quantizing self_attn.k_proj in layer 62/64...
2025-03-16 14:33:22 INFO [auto_gptq.quantization.gptq] duration: 1.4608099460601807
2025-03-16 14:33:22 INFO [auto_gptq.quantization.gptq] avg loss: 129.20584106445312
INFO - Quantizing self_attn.v_proj in layer 62/64...
2025-03-16 14:33:23 INFO [auto_gptq.quantization.gptq] duration: 1.417314052581787
2025-03-16 14:33:23 INFO [auto_gptq.quantization.gptq] avg loss: 834.720947265625
INFO - Quantizing self_attn.q_proj in layer 62/64...
2025-03-16 14:33:25 INFO [auto_gptq.quantization.gptq] duration: 1.4364099502563477
2025-03-16 14:33:25 INFO [auto_gptq.quantization.gptq] avg loss: 770.3301391601562
INFO - Quantizing self_attn.o_proj in layer 62/64...
2025-03-16 14:33:30 INFO [auto_gptq.quantization.gptq] duration: 1.4644238948822021
2025-03-16 14:33:30 INFO [auto_gptq.quantization.gptq] avg loss: 1413.948486328125
INFO - Quantizing mlp.up_proj in layer 62/64...
2025-03-16 14:33:38 INFO [auto_gptq.quantization.gptq] duration: 1.5320115089416504
2025-03-16 14:33:38 INFO [auto_gptq.quantization.gptq] avg loss: 7386.39453125
INFO - Quantizing mlp.gate_proj in layer 62/64...
2025-03-16 14:33:39 INFO [auto_gptq.quantization.gptq] duration: 1.5006358623504639
2025-03-16 14:33:39 INFO [auto_gptq.quantization.gptq] avg loss: 6787.9912109375
INFO - Quantizing mlp.down_proj in layer 62/64...
2025-03-16 14:34:32 INFO [auto_gptq.quantization.gptq] duration: 11.412427186965942
2025-03-16 14:34:32 INFO [auto_gptq.quantization.gptq] avg loss: 11235.9814453125
INFO - Start quantizing layer 63/64
INFO - Quantizing self_attn.k_proj in layer 63/64...
2025-03-16 14:34:46 INFO [auto_gptq.quantization.gptq] duration: 1.4546654224395752
2025-03-16 14:34:46 INFO [auto_gptq.quantization.gptq] avg loss: 130.98355102539062
INFO - Quantizing self_attn.v_proj in layer 63/64...
2025-03-16 14:34:48 INFO [auto_gptq.quantization.gptq] duration: 1.4156157970428467
2025-03-16 14:34:48 INFO [auto_gptq.quantization.gptq] avg loss: 958.8649291992188
INFO - Quantizing self_attn.q_proj in layer 63/64...
2025-03-16 14:34:49 INFO [auto_gptq.quantization.gptq] duration: 1.4323241710662842
2025-03-16 14:34:49 INFO [auto_gptq.quantization.gptq] avg loss: 780.7476196289062
INFO - Quantizing self_attn.o_proj in layer 63/64...
2025-03-16 14:34:55 INFO [auto_gptq.quantization.gptq] duration: 1.4556679725646973
2025-03-16 14:34:55 INFO [auto_gptq.quantization.gptq] avg loss: 2276.7041015625
INFO - Quantizing mlp.up_proj in layer 63/64...
2025-03-16 14:35:01 INFO [auto_gptq.quantization.gptq] duration: 1.533803939819336
2025-03-16 14:35:01 INFO [auto_gptq.quantization.gptq] avg loss: 7764.6142578125
INFO - Quantizing mlp.gate_proj in layer 63/64...
2025-03-16 14:35:03 INFO [auto_gptq.quantization.gptq] duration: 1.4962470531463623
2025-03-16 14:35:03 INFO [auto_gptq.quantization.gptq] avg loss: 7304.74365234375
INFO - Quantizing mlp.down_proj in layer 63/64...
2025-03-16 14:35:56 INFO [auto_gptq.quantization.gptq] duration: 11.429993629455566
2025-03-16 14:35:56 INFO [auto_gptq.quantization.gptq] avg loss: 17015.2734375
INFO - Start quantizing layer 64/64
INFO - Quantizing self_attn.k_proj in layer 64/64...
2025-03-16 14:36:10 INFO [auto_gptq.quantization.gptq] duration: 1.453392744064331
2025-03-16 14:36:10 INFO [auto_gptq.quantization.gptq] avg loss: 112.55108642578125
INFO - Quantizing self_attn.v_proj in layer 64/64...
2025-03-16 14:36:11 INFO [auto_gptq.quantization.gptq] duration: 1.4028844833374023
2025-03-16 14:36:11 INFO [auto_gptq.quantization.gptq] avg loss: 509.4556884765625
INFO - Quantizing self_attn.q_proj in layer 64/64...
2025-03-16 14:36:12 INFO [auto_gptq.quantization.gptq] duration: 1.434821605682373
2025-03-16 14:36:12 INFO [auto_gptq.quantization.gptq] avg loss: 685.0777587890625
INFO - Quantizing self_attn.o_proj in layer 64/64...
2025-03-16 14:36:18 INFO [auto_gptq.quantization.gptq] duration: 1.4707720279693604
2025-03-16 14:36:18 INFO [auto_gptq.quantization.gptq] avg loss: 990.3109130859375
INFO - Quantizing mlp.up_proj in layer 64/64...
2025-03-16 14:36:25 INFO [auto_gptq.quantization.gptq] duration: 1.572035312652588
2025-03-16 14:36:25 INFO [auto_gptq.quantization.gptq] avg loss: 8309.283203125
INFO - Quantizing mlp.gate_proj in layer 64/64...
2025-03-16 14:36:27 INFO [auto_gptq.quantization.gptq] duration: 1.8046717643737793
2025-03-16 14:36:27 INFO [auto_gptq.quantization.gptq] avg loss: 7995.7509765625
INFO - Quantizing mlp.down_proj in layer 64/64...
2025-03-16 14:37:20 INFO [auto_gptq.quantization.gptq] duration: 11.410486698150635
2025-03-16 14:37:20 INFO [auto_gptq.quantization.gptq] avg loss: 27875.2734375
INFO - Packing model...
2025-03-16 14:37:25 INFO [auto_gptq.modeling._utils] Packing model...
Packing model.layers.63.mlp.down_proj...: 100%|██████████| 448/448 [20:01<00:00, 2.68s/it]
INFO - Model packed.
2025-03-16 14:57:31 INFO [auto_gptq.modeling._utils] Model packed.
量化前模型大小为62G:
total 62G
-rw-r--r-- 1 research research 707 Mar 12 10:19 added_tokens.json
-rw-r--r-- 1 research research 16K Mar 12 10:19 args.json
-rw-r--r-- 1 research research 785 Mar 12 10:15 config.json
-rw-r--r-- 1 research research 214 Mar 12 10:15 generation_config.json
-rw-r--r-- 1 research research 1.6M Mar 12 10:19 merges.txt
-rw-r--r-- 1 research research 4.6G Mar 12 10:15 model-00001-of-00014.safetensors
-rw-r--r-- 1 research research 4.6G Mar 12 10:16 model-00002-of-00014.safetensors
-rw-r--r-- 1 research research 4.6G Mar 12 10:16 model-00003-of-00014.safetensors
-rw-r--r-- 1 research research 4.6G Mar 12 10:16 model-00004-of-00014.safetensors
-rw-r--r-- 1 research research 4.6G Mar 12 10:16 model-00005-of-00014.safetensors
-rw-r--r-- 1 research research 4.6G Mar 12 10:17 model-00006-of-00014.safetensors
-rw-r--r-- 1 research research 4.6G Mar 12 10:17 model-00007-of-00014.safetensors
-rw-r--r-- 1 research research 4.6G Mar 12 10:17 model-00008-of-00014.safetensors
-rw-r--r-- 1 research research 4.6G Mar 12 10:18 model-00009-of-00014.safetensors
-rw-r--r-- 1 research research 4.6G Mar 12 10:18 model-00010-of-00014.safetensors
-rw-r--r-- 1 research research 4.6G Mar 12 10:18 model-00011-of-00014.safetensors
-rw-r--r-- 1 research research 4.6G Mar 12 10:18 model-00012-of-00014.safetensors
-rw-r--r-- 1 research research 4.6G Mar 12 10:19 model-00013-of-00014.safetensors
-rw-r--r-- 1 research research 2.0G Mar 12 10:19 model-00014-of-00014.safetensors
-rw-r--r-- 1 research research 62K Mar 12 10:19 model.safetensors.index.json
-rw-r--r-- 1 research research 613 Mar 12 10:19 special_tokens_map.json
-rw-r--r-- 1 research research 8.0K Mar 12 10:19 tokenizer_config.json
-rw-r--r-- 1 research research 11M Mar 12 10:19 tokenizer.json
-rw-r--r-- 1 research research 2.7M Mar 12 10:19 vocab.json
量化后模型大小为19G:
total 19G
-rw-r--r-- 1 research research 707 Mar 16 14:58 added_tokens.json
-rw-r--r-- 1 research research 1.2K Mar 16 14:58 config.json
-rw-r--r-- 1 research research 1.6M Mar 16 14:58 merges.txt
-rw-r--r-- 1 research research 19G Mar 16 14:58 model.safetensors
-rw-r--r-- 1 research research 271 Mar 16 14:58 quantize_config.json
-rw-r--r-- 1 research research 613 Mar 16 14:58 special_tokens_map.json
-rw-r--r-- 1 research research 8.0K Mar 16 14:58 tokenizer_config.json
-rw-r--r-- 1 research research 11M Mar 16 14:58 tokenizer.json
-rw-r--r-- 1 research research 2.7M Mar 16 14:58 vocab.json
3. 量化模型部署
vLLM已支持GPTQ,可以直接使用AutoGPTQ量化的模型。使用GPTQ模型与vLLM的基本用法相同。
CUDA_VISIBLE_DEVICES=0,1,2,3 \
vllm serve /data/quantized_model \
--tensor-parallel-size 4 \
--port 8001
另外对api调用的model id,可以通过设置别名方式,而不需要暴露完整路径:
vllm serve my_model --served-model-name my_alias
随后,可以这样调用API:
curl http://localhost:8001/v1/chat/completions -H "Content-Type: application/json" -d '{"model": "quantized_model","messages": [{"role": "system", "content": "You are Qwen, created by Alibaba Cloud. You are a helpful assistant."},{"role": "user", "content": "推荐一款防水耳机."}],"temperature": 0.7,"top_p": 0.8,"repetition_penalty": 1.05,"max_tokens": 512
}'
也可以使用 openai Python包中的API客户端:
from openai import OpenAIopenai_api_key = "EMPTY"
openai_api_base = "http://localhost:8001/v1"client = OpenAI(api_key=openai_api_key,base_url=openai_api_base,
)chat_response = client.chat.completions.create(model="/data/quantized_model",messages=[{"role": "system", "content": "You are Qwen, created by Alibaba Cloud. You are a helpful assistant."},{"role": "user", "content": "推荐一款防水耳机"},],temperature=0.7,top_p=0.8,max_tokens=512,extra_body={"repetition_penalty": 1.05,},
)
print("Chat response:", chat_response)
实测了下,模型生成吞吐量可以在92 tokens/s, 还是很不错的。

注意:需要注意下,百亿参数的模型,一般还是选择int8量化比较合适。int4更适合是千亿模型,百亿规模损失会有点大。
以下是int8的量化loss表现:

还有一个需要注意的是,量化后用vllm推理,默认会在prompt中添加<|im_start>assistant\n<think>这段,其实就是强制模型先输出推理链,本质上是指令遵循。所以你推理拿到的生成结果看起来是丢了<think>这个特殊token,实际上是已经在prompt中体现了。
4. 参考材料
【1】https://github.com/AutoGPTQ/AutoGPTQ/issues/196
【2】GPTQ - Qwen
相关文章:
【大模型实战篇】使用GPTQ量化QwQ-32B微调后的推理模型
1. 量化背景 之所以做量化,就是希望在现有的硬件条件下,提升性能。量化能将模型权重从高精度(如FP32)转换为低精度(如INT8/FP16),内存占用可减少50%~75%。低精度运算(如INT8…...
Spring WebFlux之流式输出
🎉🎉🎉🎉🎉🎉 欢迎访问的个人博客:https://swzbk.site/,加好友,拉你入福利群 🎉🎉🎉🎉🎉🎉 流式输…...
基于springboot医疗平台系统(源码+lw+部署文档+讲解),源码可白嫖!
摘要 信息化时代,各行各业都以网络为基础飞速发展,而医疗服务行业的发展却进展缓慢,传统的医疗服务行业已经逐渐不满足民众的需求,有些还在以线下预约挂号的方式接待病人,为此设计一个医疗平台系统很有必要。此类系统…...
Stable Diffusion lora训练(一)
一、不同维度的LoRA训练步数建议 2D风格训练 数据规模:建议20-50张高质量图片(分辨率≥10241024),覆盖多角度、多表情的平面风格。步数范围:总步数控制在1000-2000步,公式为 总步数 Repeat Image Epoch …...
网络空间安全(37)获取webshell方法总结
一、直接上传获取Webshell 这是最常见且直接的方法,利用网站对上传文件的过滤不严或存在漏洞,直接上传Webshell文件。 常见场景: 许多PHP和JSP程序存在此类漏洞。例如,一些论坛系统允许用户上传头像或心情图标,攻击者可…...
第十三次CCF-CSP认证(含C++源码)
第十三次CCF-CSP认证 跳一跳满分题解 碰撞的小球满分题解遇到的问题 棋局评估满分题解 跳一跳 题目链接 满分题解 没什么好说的 基本思路就是如何用代码翻译题目所给的一些限制,以及变量应该如何更新,没像往常一样给一个n,怎么读入数据&…...
【Agent】OpenManus-Prompt组件详细分析
1. 提示词架构概述 OpenManus 的提示词组件采用了模块化设计,为不同类型的智能体提供专门的提示词模板。每个提示词模块通常包含两种核心提示词:系统提示词(System Prompt)和下一步提示词(Next Step Prompt࿰…...
swagger ui 界面清除登录信息的办法
我们在开发过程中,用swagger ui 测试接口的时候,可能会要修改当前登录的用户。 但是如果我们在谷歌中对调试的本地swagger ui 登录地址存储过账户密码,每次启动项目调试之后,都会自动登录swagger ui ,登录界面一闪就…...
TensorFlow 的基本概念和使用场景
TensorFlow 是一个由 Google 开发的开源机器学习框架,主要用于构建和训练深度学习模型。下面是一些 TensorFlow 的基本概念和使用场景: 基本概念: 张量(Tensor):在 TensorFlow 中,数据以张量的…...
基于x11vnc的ubuntu远程桌面
1、安装VNC服务 sudo apt install x11vnc -y2、创建连接密码 sudo x11vnc -storepasswd3、安装lightdm服务 x11vnc 在 默认的 GDM3 中不起作用,因此需要使用 lightdm 桌面管理环境 sudo apt install lightdm -y切换至lightdm,上一步已经切换则跳过该…...
Cursor解锁Claude Max,助力AI编程新突破!
Cursor 最新推出的 Claude Max 模型,以其卓越的性能和创新的能力,正在重新定义我们对 AI 辅助编程的认知。这款搭载 Claude3.7 大脑的超级模型,不仅具备超强智能,还凭借一系列技术突破,向传统 AI 编程工具发起了挑战。…...
created在vue3 script setup中的写法
在 Vue 2 里,created 是一个生命周期钩子函数,会在实例已经创建完成之后被调用,主要用于在实例初始化之后、数据观测和 event/watcher 事件配置之前执行代码。而在 Vue 3 的 <script setup> 语法糖里,不再有像 Vue 2 那样直…...
GenICam标准
GenICam的目标是为所有类型的相机提供一个统一的编程接口。无论相机使用的是哪种传输协议或实现了哪些功能,编程接口(API)都是一样的。 GenICam(Generic Interface for Cameras)是一个为工业相机和图像采集设备设计的…...
ESP8266 与 ARM7 接口-LPC2148 创建 Web 服务器以控制 LED
ESP8266 与 ARM7 接口-LPC2148 创建 Web 服务器以控制 LED ESP8266 Wi-Fi 收发器提供了一种将微控制器连接到网络的方法。它被广泛用于物联网项目,因为它便宜、体积小且易于使用。 在本教程中,我们将 ESP8266 Wi-Fi 模块与 ARM7-LPC2148 微控制器连接,并创建一个 Web 服务…...
智享三代 AI 无人直播系统:颠覆传统,重塑直播新格局
在当今数字化浪潮席卷全球的时代,直播行业作为互联网经济的重要组成部分,正以前所未有的速度蓬勃发展。从最初的娱乐直播兴起,到如今电商直播、知识付费直播等多元业态百花齐放,直播已然成为人们生活和商业活动中不可或缺的一环。…...
通过C#脚本更改材质球的参数
// 设置贴图Texture mTexture Resources.Load("myTexture", typeof(Texture )) as Texture;material.SetTexture("_MainTex", mTexture );// 设置整数material.SetInt("_Int", 1);// 设置浮点material.SetFloat("_Float", 0.1f);// 设…...
FPGA管脚约束
目录 前言 一、IO约束 二、延迟约束 前言 IO约束包括管脚约束和延迟约束。 一、IO约束 对管脚进行约束,对应的约束语句: set_property -dict {PACKAGE_PIN AJ16 IOSTANDARD LVCMOS18} [get_ports "led[0]" ] 上面是单端的管脚&…...
已在此计算机上安装相同或更高版本的 .NET Framework 4”安装报错问题
安裝低版本的 .netFramework會被拒絕 需要做兩件事 1,允許windows安裝低版本的.net framework “已在此计算机上安装相同或更高版本的 .NET Framework 4”安装报错问题-CSDN博客 2,設置完成後重新安裝低版本的 .net framework,要用對應開發版本的 Win10 电脑安…...
如何判断 MSF 的 Payload 是 Staged 还是 Stageless(含 Meterpreter 与普通 Shell 对比)
在渗透测试领域,Metasploit Framework(MSF)的 msfvenom 工具是生成 Payload(载荷)的核心利器。然而,当我们选择 Payload 时,经常会遇到一个问题:这个 Payload 是 Staged(…...
【万字总结】前端全方位性能优化指南(一)——Brotli压缩、CDN智能分发、资源合并
前言 2025年前端技术前沿呈现三大核心趋势:AI深度赋能开发全流程,智能工具如GitHub Copilot X和Cursor实现代码生成、实时协作与自动化审查,开发效率提升3倍以上;性能与架构革新,WebAssembly 2.0支持多线程与Rust内存优化,边缘计算将渲染延迟压至50ms内,微前端Module …...
二.使用ffmpeg对原始音频数据重采样并进行AAC编码
重采样:将音频三元组【采样率 采样格式 通道数】之中的任何一个或者多个值改变。 一.为什么要进行重采样? 1.原始音频数据和编码器的数据格式不一致 2.播放器要求的和获取的数据不一致 3.方便运算 二.本次编码流程 1.了解自己本机麦克风参数&#x…...
实现前端.ttf字体包的压缩
前言 平常字体包都有1M的大小,所以网络请求耗时会比较长,所以对字体包的压缩也是前端优化的一个点。但是前端如果想要特点字符打包成字体包,网上查阅资料后,都是把前端代码里面的字符获取,但是对于动态的内容…...
uni-app集成保利威直播、点播SDK经验FQ(二)|小程序直播/APP直播开发适用
通过uniapp集成保利威直播、点播SDK来开发小程序/APP的视频直播能力,在实际开发中可能会遇到的疑问和解决方案,下篇。更多疑问请咨询19924784795。 1.ios不能后台挂起uniapp插件 ios端使用后台音频播放和画中画功能,没有在 manifest.json 进…...
Spring Framework 中 BeanDefinition 是什么
BeanDefinition 是 Spring Framework 中一个核心的接口,它描述了一个 Bean 的定义。你可以把它看作是 Spring IoC 容器中 Bean 的“蓝图”或“配置元数据”。它包含了 Spring 容器创建、配置和管理 Bean 所需的所有信息。 BeanDefinition 中包含的信息:…...
Sensodrive机器人力控关节模组SensoJoint在海洋垃圾清理机器人中的拓展应用
海洋污染已成为全球性的环境挑战,其中海底垃圾的清理尤为困难。据研究,海洋中约有2600万至6600万吨垃圾,超过90%沉积在海底。传统上,潜水员收集海底垃圾不仅成本高昂,而且充满风险。为解决这一问题,欧盟资助…...
MyBatis 配置文件解析使用了哪些设计模式
MyBatis 配置文件解析过程中,主要运用了以下几种设计模式 1. 建造者模式 (Builder Pattern): 应用场景: SqlSessionFactoryBuilder 和 XMLConfigBuilder 类都体现了建造者模式。模式描述: 建造者模式将一个复杂对象的构建过程与其表示分离,使得同样的构…...
sentinel限流算法
限流算法:固定窗口算法、滑动时间窗口、令牌桶和漏桶这四种常见限流算法的原理: 限流算法原理 固定窗口: 固定窗口算法将时间划分为固定大小的窗口,并在每个窗口内限制请求的数量。在每个窗口开始时,计数器重置&#…...
Git的基本指令
一、回滚 1.git init 在项目文件夹中打开bash生成一个.git的子目录,产生一个仓库 2.git status 查看当前目录下的所有文件的状态 3.git add . 将该目录下的所有文件提交到暂存区 4.git add 文件名 将该目录下的指定文件提交到暂存区 5.git commit -m 备注信…...
github上传本地文件到远程仓库(空仓库/已有文件的仓库)
今天搞自己本地训练的代码到仓库留个档,结果遇到了好多问题,到腾了半天才搞明白整个过程,留在这里记录一下。 远程空仓库 主要根据官方教程:Adding locally hosted code to GitHub - GitHub Docs #1. cd到你需要上传的文件夹&a…...
Git 分支使用规范全解(多人协作开发适用)
🚀 Git 分支使用规范全解(多人协作开发适用) 本文将为你梳理一套清晰、标准、适合企业/团队使用的 Git 分支管理策略,适用于前后端、边缘端、AI项目等多种场景。 🧩 为什么要规范分支管理? 防止多人协作混乱、冲突频发清晰区分:开发中 / 待发布 / 已上线 的版本快速定…...
