当前位置: 首页 > news >正文

通义千问Qwen-7B-Chat Windows本地部署教程-详细认真版

通义千问本地部署教程🚀

        本专栏的第四弹,在实现了联网调用通义千问模型进行多轮对话,流式输出,以及结合LangChain实现自建知识库之后,开始准备考虑实现对大模型进行本地部署,网上找不到看着比较舒服的教程,本文对于部署大模型过程中比较重要的,环境搭建,模型下载等进行详细介绍,如果您没有研究需求只有使用需求,请直接安装环境-下载模型-运行代码,由于这部分内容实在太多,所以可能还是需要一些相关的基础才能完全读懂本篇文字,如果您之前稍微研究过大语言模型的本地部署我相信这篇文章一定能解决您的问题,如果有什么我写的不清楚的地方,非常欢迎各位给我留言评论探讨,然后虽然我看好像其他相关的文章好像都收费,但是我还是决定免费,由于我是会员所以我有版权保护,所以不用太担心别人直接爬走,希望帮助到各位,如果可以您点个赞我会非常开心的。


第一弹 调用阿里通义千问大语言模型API-小白新手教程-python
第二弹 LangChain结合通义千问的自建知识库
第三弹 使用LangChain结合通义千问API基于自建知识库的多轮对话和流式输出

文章目录

  • 通义千问本地部署教程🚀
    • 1.Qwen-7B-Chat 模型的下载
    • 2.Qwen-7B-Chat 环境的安装
    • 3.运行本地的部署代码实现多轮对话
    • 4.结合Swift库实现流式输出-认真总结
      • 4.1 该部分实现过程和踩坑经验分享
      • 4.2 真正实现离线的使用本地模型的多轮对话和流式输出的最终代码
    • 5.相关文档链接💻
    • 6.结束😊

1.Qwen-7B-Chat 模型的下载

        首先需要下载通义千问的Qwen-7B-Chat的模型文件,其下载地址为阿里官方的大语言模型社区,模搭ModelScope,其中通义千问的Qwen-7B-Chat 的下载和相关介绍的地址为。
https://modelscope.cn/models/qwen/Qwen-7B-Chat/summary
在这里插入图片描述
点击其中的模型文件,进入模型文件页面,之后点击右侧的下载模型
在这里插入图片描述
        右侧会出现两个下载方式,第一个是用SDK也就是安装安装工具包下载,第二个是用git下载,这里还是推荐用第一种,但是实际使用的时候,还需要添加一个新的参数用来设置下载地址,否则就会下载到安装包的目录下
在这里插入图片描述

        在安装好环境之后,之后运行下面的代码就可以下载到本地了,模型大小一共是14.4个Gchche_dir就是自己设置的模型下载的地址是是一个文件夹的目录

from modelscope import snapshot_download
model_dir = snapshot_download('qwen/Qwen-7B-Chat',cache_dir='自己的地址')

        运行起来的下过如下,当运行到下载1个G以上的文件的时候会卡住一阵,才会开始下载,如果这里长时间没响应那就是网络条件不行了。
在这里插入图片描述

2.Qwen-7B-Chat 环境的安装

        为了运行之后本地部署的Qwen-7B-Chat模型,我们需要根据要求在Anaconda中安装一个满足模型运行要求的虚拟环境,其官方的配置环境要求如下,本文配置的环境为使用GPU Pytorch的版本。官网的要求如下。
在这里插入图片描述

        除了常规的Pytorch之外还需要进行以下两次安装安装modelscope可以用来下载模型,在下载的过程中有网络要求我用的宽带为100M的网线链接最后下了不到1个小时,如果网络不行在下载到大文件的时候会断开链接。

pip install modelscope

        然后是官方说的运行Qwen-7B-需要安装的依赖。
在这里插入图片描述

pip install transformers==4.32.0 accelerate tiktoken einops scipy transformers_stream_generator==0.0.4 peft deepspeed

        具体安装过程根据不同的系统电脑各有各的微小差异,而且有时候充满了玄学,在这里我说一下我自己的配置,然后给大家参考。

名称硬件型号/软件版本
CPU英特尔 Core i7-14700KF
GPUNVIDIA GeForce RTX 4070 Ti(12 GB/华硕)
CUDADriver Version: 546.65 CUDA Version: 12.3
内存32 GB(威刚 DDR5 6000MHz16GB x2)
硬盘GAMMIX S70 SE(1024 GB/固态硬盘)
Python3.9.15
Numpy1.23.4
pip22.3.1
Torch1.13.1
modelscope1.12.0

3.运行本地的部署代码实现多轮对话

        在安装好环境以及下载了模型文件之后,就可以运行官方的例程代码来观察对话效果,官方的快速开始代码如下,先给出官方代码之后我会精简然后介绍重要参数的作用

from modelscope import AutoModelForCausalLM, AutoTokenizer
from modelscope import GenerationConfig# Note: The default behavior now has injection attack prevention off.
tokenizer = AutoTokenizer.from_pretrained("qwen/Qwen-7B-Chat", trust_remote_code=True)# use bf16
# model = AutoModelForCausalLM.from_pretrained("qwen/Qwen-7B-Chat", device_map="auto", trust_remote_code=True, bf16=True).eval()
# use fp16
# model = AutoModelForCausalLM.from_pretrained("qwen/Qwen-7B-Chat", device_map="auto", trust_remote_code=True, fp16=True).eval()
# use cpu only
# model = AutoModelForCausalLM.from_pretrained("qwen/Qwen-7B-Chat", device_map="cpu", trust_remote_code=True).eval()
# use auto mode, automatically select precision based on the device.
model = AutoModelForCausalLM.from_pretrained("qwen/Qwen-7B-Chat", device_map="auto", trust_remote_code=True).eval()# Specify hyperparameters for generation. But if you use transformers>=4.32.0, there is no need to do this.
# model.generation_config = GenerationConfig.from_pretrained("Qwen/Qwen-7B-Chat", trust_remote_code=True) # 可指定不同的生成长度、top_p等相关超参# 第一轮对话 1st dialogue turn
response, history = model.chat(tokenizer, "你好", history=None)
print(response)
# 你好!很高兴为你提供帮助。# 第二轮对话 2nd dialogue turn
response, history = model.chat(tokenizer, "给我讲一个年轻人奋斗创业最终取得成功的故事。", history=history)
print(response)
# 这是一个关于一个年轻人奋斗创业最终取得成功的故事。
# 故事的主人公叫李明,他来自一个普通的家庭,父母都是普通的工人。从小,李明就立下了一个目标:要成为一名成功的企业家。
# 为了实现这个目标,李明勤奋学习,考上了大学。在大学期间,他积极参加各种创业比赛,获得了不少奖项。他还利用课余时间去实习,积累了宝贵的经验。
# 毕业后,李明决定开始自己的创业之路。他开始寻找投资机会,但多次都被拒绝了。然而,他并没有放弃。他继续努力,不断改进自己的创业计划,并寻找新的投资机会。
# 最终,李明成功地获得了一笔投资,开始了自己的创业之路。他成立了一家科技公司,专注于开发新型软件。在他的领导下,公司迅速发展起来,成为了一家成功的科技企业。
# 李明的成功并不是偶然的。他勤奋、坚韧、勇于冒险,不断学习和改进自己。他的成功也证明了,只要努力奋斗,任何人都有可能取得成功。# 第三轮对话 3rd dialogue turn
response, history = model.chat(tokenizer, "给这个故事起一个标题", history=history)
print(response)
# 《奋斗创业:一个年轻人的成功之路》

        运行的结果如下,红色的是各种前置检查信息,我专门断网测试了一下输出的也是这些内容。

在这里插入图片描述

        之后对代码进行精简,实现一个简单的多轮对话功能。精简之后的代码如下。其中的device_map如果设置为cpu则模型将会在cpu上运行,如果设置为Auto如果Pytorch为GPU版本的话将会在GPU上运行。关于非常容易关注到的tokenizer,官方是这吗说的🤭说现在还没有概念的对应,所以无需纠结这块是啥东西。根据经验推测它应该是跟分词有关的一个东西。

在这里插入图片描述

from modelscope import AutoModelForCausalLM, AutoTokenizermodel_path = "D:\qwen\Qwen-7B-Chat"tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(model_path, device_map="auto", trust_remote_code=True).eval()history=Nonewhile True:message = input('User:')response, history = model.chat(tokenizer, message, history=history)print('System:',end='')print(response)
  1. from modelscope import AutoModelForCausalLM, AutoTokenizer: 从modelscope库中导入两个类:AutoModelForCausalLMAutoTokenizer。这两个类分别用于加载预训练的因果语言模型(例如,GPT系列模型)和分词器。分词器用于文本的预处理,将文本转换为模型能理解的格式。

  2. model_path = "D:\qwen\Qwen-7B-Chat": 定义模型文件存放的路径。这里假定你已经有了一个预训练模型,存储在指定的路径下。

  3. tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True): 从给定的路径加载预训练的分词器。trust_remote_code=True参数允许加载并执行远程代码,这对于加载自定义的分词器逻辑可能是必需的。

  4. model = AutoModelForCausalLM.from_pretrained(model_path, device_map="auto", trust_remote_code=True).eval(): 类似地,从指定路径加载预训练的语言模型,并将模型设置为评估模式。device_map="auto"指示库自动选择运行模型的设备(CPU或GPU).eval()方法用于切换到模型的评估模式,这通常在预测时使用,以禁用训练时特有的行为,如Dropout

  5. history=None: 初始化history变量。这个变量用于存储对话历史,使模型能够在生成回答时考虑到之前的上下文。

  6. while True:: 开始一个无限循环,用于持续接收用户输入并生成回应。

  7. message = input('User:'): 通过input函数接收用户的输入。

  8. response, history = model.chat(tokenizer, message, history=history): 调用模型的chat方法生成回应。这个方法接受分词器、用户的消息以及可选的历史记录作为输入,并返回模型的回应和更新后的历史记录。更新后的历史记录可以在下一次迭代中使用,以便模型能够参考之前的对话内容。

  9. print('System:',end='')print(response): 首先打印System:,不换行,然后打印模型生成的回应。

        运行结果如下:

在这里插入图片描述

        本设备在模型推理时的性能检测效果如下。

在这里插入图片描述

        由于其生成的比较慢,我就加了一下每次推理运行的时间,其运行时间效果如图,我大概估计了一下,输出一个Token的推理时间大概为1S,在官方的快速开始的例程序中,所以等待的过程非常的难受。

在这里插入图片描述

4.结合Swift库实现流式输出-认真总结

        在经历了非常不舒服的等待之后,决定尝试一下流式输出,然后这部分代码就非常的不好找了,我在进入了ModelScope的官方咨询群之后询问了半天,加上自己参悟最终实现了在Windows上使用本地部署的通义千问模型多轮对话的效果,那接下来直接开始。我会把这个过程以及采的坑详细说明,如果您是有相关基础的想直接使用的技术人员直接跳到最后的代码部分即可

4.1 该部分实现过程和踩坑经验分享

        首先,对于流式输出官方人员给我发的一个链接是这样的。

在这里插入图片描述

        点开里面的推理文档,下滑找到对应的代码。
链接为Swift官方推理文档

在这里插入图片描述

        这里我直接把代码复制到下面,我们先不纠结里面的内容,这里用到了一个新的库swift,首先需要安装它,这里是一个坑
其安装命令为:

pip install ms-swift

        而并不是pip install swift,如果你用的是pip install swift安装会安装不上,会出现如下错误,提示你要取下载红帽和Ubtuntu版本的库,但是这是Liunx系统的库,所以安装不上,只有运行pip install ms-swift才能安装成功。

在这里插入图片描述

import os
os.environ['CUDA_VISIBLE_DEVICES'] = '0'from swift.llm import (get_model_tokenizer, get_template, inference_stream, ModelType, get_default_template_type,
)
from swift.utils import seed_everythingmodel_type = ModelType.qwen_7b_chat
template_type = get_default_template_type(model_type)
print(f'template_type: {template_type}')  # template_type: qwenmodel, tokenizer = get_model_tokenizer(model_type, model_kwargs={'device_map': 'auto'})template = get_template(template_type, tokenizer)
seed_everything(42)
query = '浙江的省会在哪里?'
gen = inference_stream(model, template, query)
print(f'query: {query}')
for response, history in gen:print(f'response: {response}')
query = '这有什么好吃的?'
gen = inference_stream(model, template, query, history)
print(f'query: {query}')
for response, history in gen:print(f'response: {response}')
print(f'history: {history}')"""Out[0]
query: 浙江的省会在哪里?
...
response: 浙江省的省会是杭州。
query: 这有什么好吃的?
...
response: 杭州市有很多著名的美食,例如西湖醋鱼、龙井虾仁、糖醋排骨、毛血旺等。此外,还有杭州特色的点心,如桂花糕、荷花酥、艾窝窝等。
history: [('浙江的省会在哪里?', '浙江省的省会是杭州。'), ('这有什么好吃的?', '杭州市有很多著名的美食,例如西湖醋鱼、龙井虾仁、糖醋排骨、毛血旺等。此外,还有杭州特色的点心,如桂花糕、荷花酥、艾窝窝等。')]
"""

        直接说这个代码的结论,首先这个代码是下载和推理一体的代码,当第一次运行的时候,会在指定路径下下载模型文件,第二次运行时检测到指定文件夹下的文件了之后,就会开始进入模型推理阶段,下面的运行输出是我的模型第二次之后运行的结果。

在这里插入图片描述

        第二次运行之后对话输出部分的效果如下,之后我要对流式输出的结果进行改进,一个一个问题解决。

在这里插入图片描述

        可是即便是第二次及之后运行,其不联网依然会报下面的错误,总之该代码不能实现无网络状态下的流方式输出,这也是一个大坑。

在这里插入图片描述

        根据对代码的分析,最后首先我实现了V1版本的代码,代码如下使用swift中的inference_streamAPI进行流式输出,且可以加载本地的自己的模型,这里再print中加入\r换行符会让每次打印的时候光标出现在行的开头,当输出的文字中没有换行的时候,输出的结果岁月静好。

from modelscope import AutoModelForCausalLM, AutoTokenizer
from swift.llm import  inference_stream,get_templatemodel_path = "D:\qwen\Qwen-7B-Chat"tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(model_path, device_map="auto", trust_remote_code=True).eval()
template_type = 'qwen'
template = get_template(template_type, tokenizer)
history = Nonewhile True:query = input('User:')gen = inference_stream(model, template, query, history)for response, h in gen:print(f'\rSystem: {response}',end="")history = hprint()

在这里插入图片描述

        当输出内容过长需要换行的时候结果直接负重前行(自己创造的大坑)。

在这里插入图片描述

4.2 真正实现离线的使用本地模型的多轮对话和流式输出的最终代码

        之后改进了V2版本也是最终版本,代码如下,由于这个代码是我自己悟的可能还有不少可以改进的地方,但是已经可以实现预期的的功能,详细的解释我放在后面 首先再次给出swift安装命令。

pip install ms-swift

        代码部分:

from modelscope import AutoModelForCausalLM, AutoTokenizer
from swift.llm import  inference_stream,get_templatemodel_path = "D:\qwen\Qwen-7B-Chat"tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(model_path, device_map="auto", trust_remote_code=True).eval()
template_type = 'qwen'
template = get_template(template_type, tokenizer)
history = Nonebefore_len = 0while True:query = input('User:')gen = inference_stream(model, template, query, history)print(f'System:', end="")for response, h in gen:print(response[before_len:],end="")before_len = len(response)history = hprint()

在这里插入图片描述

下面是逐行解释:

  1. from modelscope import AutoModelForCausalLM, AutoTokenizer: 从modelscope库中导入AutoModelForCausalLMAutoTokenizerAutoModelForCausalLM用于加载和使用因果语言模型(如GPT),AutoTokenizer用于文本的分词和编码。

  2. from swift.llm import inference_stream, get_template: 从swift.llm模块中导入inference_streamget_template函数。inference_stream用于生成文本流,get_template用于获取特定类型的模板,这里的模板可能是指模型的输入格式或结构。

  3. model_path = "D:\qwen\Qwen-7B-Chat": 定义模型的存储路径。

  4. tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True): 加载预训练的分词器。from_pretrained方法从指定路径加载模型,trust_remote_code=True允许加载远程代码,这通常用于加载自定义的模型或分词器。

  5. model = AutoModelForCausalLM.from_pretrained(model_path, device_map="auto", trust_remote_code=True).eval(): 加载并准备模型。from_pretrained同样用于从指定路径加载模型,device_map="auto"表示自动选择设备运行模型(如GPU或CPU),trust_remote_code=True同上。.eval()将模型设置为评估模式,通常在预测或评估时使用,以禁用特定于训练的操作如Dropout。

  6. template_type = 'qwen': 定义模板类型,这里为'qwen'

  7. template = get_template(template_type, tokenizer): 获取指定类型的模板。这里的模板可能用于定义输入的格式或者是模型预处理的一部分。

  8. history = None: 初始化历史记录变量,用于存储对话历史,以便模型可以根据之前的交流生成回应。

  9. before_len = 0: 初始化变量,用于记录上一次生成文本的长度。

  10. while True:: 开始一个无限循环,用于连续接收用户输入并生成回应。

  11. query = input('User:'): 接收用户的输入。

  12. gen = inference_stream(model, template, query, history): 调用inference_stream函数,传入模型、模板、用户查询和历史记录,开始生成模型的回应。

  13. print(f'System:', end=""): 打印“System:”,不换行,准备输出模型的回应。

  14. for response, h in gen:: 遍历生成器gen的输出,gen输出的每个元素包含回应和更新后的历史记录。

  15. print(response[before_len:],end=""): 打印新生成的回应部分(去掉之前已经打印的部分),不换行。

  16. before_len = len(response): 更新已打印文本的长度。

  17. history = h: 更新历史记录,以便在下一次迭代时使用。

5.相关文档链接💻

modelscop模型介绍下载地址
https://modelscope.cn/models/qwen/Qwen-7B-Chat/summary
swift文档地址
https://github.com/modelscope/swift/blob/main/docs/source/LLM/LLM%E6%8E%A8%E7%90%86%E6%96%87%E6%A1%A3.md

6.结束😊

        目前这是我出的第一篇大语言模型的部署的文章,之后会考虑一直更新这个系列,会不定期的完善细节,之后会越来越多的补充,如果有什么问题,欢迎留言探讨。有专业需求可以在公众号上联系我。

相关文章:

通义千问Qwen-7B-Chat Windows本地部署教程-详细认真版

通义千问本地部署教程🚀 本专栏的第四弹,在实现了联网调用通义千问模型进行多轮对话,流式输出,以及结合LangChain实现自建知识库之后,开始准备考虑实现对大模型进行本地部署,网上找不到看着比较舒服的教程&…...

探索C语言位段的秘密

位段 1. 什么是位段2. 位段的内存分配3. 位段的跨平台问题4. 位段的应用4. 使用位段的注意事项 1. 什么是位段 我们使用结构体实现位段,位段的声明和结构体是类似的,有两个不同: 位段的成员必须是int,unsigned int,或…...

数据库-数据库设计-社交关系

佛 每有一个新方案,就要考虑有什么影响增删改查可扩展性 MySQL 根据ER图设计表 create table follow(id bigint unsigned not null auto_increment comment 主键,gmt_create datetime null default current_timestamp,gmt_modified null default current_timest…...

YOLO算法改进Backbone系列之:EfficientViT

EfficientViT: Memory Effificient Vision Transformer with Cascaded Group Attention 摘要:视觉transformer由于其高模型能力而取得了巨大的成功。然而,它们卓越的性能伴随着沉重的计算成本,这使得它们不适合实时应用。在这篇论文中&#x…...

JANGOW: 1.0.1

kali:192.168.223.128 主机发现 nmap -sP 192.168.223.0/24 端口扫描 nmap -p- 192.168.223.154 开启了21 80端口 web看一下,有个busque.php参数是buscar,但是不知道输入什么,尝试文件包含失败 扫描目录 dirsearch -u http://192.168.223.154 dirse…...

Elasticsearch 创建index库 timeout

问题概述 使用 python 客户端 代码进行创建,【之前成功创建,但是现在出现报错,报错代码es_connection.client.indices.create】def create_vector_index(dataset_index_name,vector_query_field,query_field):es_connection = get_collention(dataset_index_name,vector_que…...

2024最新可用免费天气预报API接口

天气API接口数据, 数据字段最全,免费,稳定的实况天气预报接口 5分钟左右更新一次,支持全国3000多个市区县, 包含基本天气信息、24小时逐小时天气、气象预警列表、湿度、能见度、气压、降雨量、紫外线、风力风向风速、日出日落、空气质量、pm2…...

【AIGC】开源声音克隆GPT-SoVITS

GPT-SoVITS 是由 RVC 创始人 RVC-Boss 与 AI 声音转换技术专家 Rcell 共同开发的一款跨语言 TTS 克隆项目,被誉为“最强大中文声音克隆项目” 相比以往的声音克隆项目,GPT-SoVITS 对硬件配置的要求相对较低,一般只需 6GB 显存以上的 GPU 即可…...

YOLOv9图像标注和格式转换

一、软件安装 labelimg安装(anaconda) 方法一、 pip install labelImg 方法二、 pip install PyQt5 -i https://pypi.tuna.tsinghua.edu.cn/simple/ pip install pyqt5-tools -i https://pypi.tuna.tsinghua.edu.cn/simple/ pip install lxml -i ht…...

车载系统相关

车载SBL和EC系统介绍 一、概述 车载SBL(Signal Broadcasting Layer)和EC(Electronic Control)系统是现代汽车中不可或缺的组成部分。它们共同协作,确保车辆的稳定、安全和高效运行 二、SBL系统介绍 SBL系统&#x…...

AWS对文本进行语言识别

AWS提供了名为Amazon Comprehend 的服务,它支持对文本进行语言识别。Amazon Comprehend 是一项自然语言处理(NLP)服务,它可以用于分析文本并提取有关文本内容的信息。 我们可以通过使用 Amazon Comprehend API 轻松地集成这些功能…...

HTTP 与HTTPS笔记

HTTP 80 HTTP是一个在计算机世界里专门在【两点】之间【传输】文字、图片、音频、视频等【超文本】数据的约定和规范。 HTTP状态码 1xx 提示信息,表示目前是协议处理的中间状态,还需要后续的操作;2xx 200 204 026 成功3xx 重定向&#xff…...

【k8s配置与存储--配置管理】

1、ConfigMap的配置 1.1 ConfigMap介绍 ConfigMap 是一种 API 对象,用来将非机密性的数据保存到键值对中。使用时, Pod 可以将其用作环境变量、命令行参数或者存储卷中的配置文件。 ConfigMap 将你的环境配置信息和容器镜像解耦,便于应用配…...

如何在C++中嵌入SQL语句?解释一下什么是ODBC、JDBC以及它们在C++数据库编程中的作用。

如何在C中嵌入SQL语句? 在C中嵌入SQL语句通常涉及使用数据库连接库或ORM(对象关系映射)框架,这些工具提供了与特定数据库管理系统(DBMS)交互的接口。以下是几种在C中嵌入SQL语句的常见方法: 使…...

【Simulink系列】——动态系统仿真 之 混合系统

声明:本系列博客参考有关专业书籍,截图均为自己实操,仅供交流学习! 一、混合系统概述 由不同类型系统共同构成的系统称为混合系统!仿真时必须考虑连续信号和离散信号的采样匹配问题,一般使用变步长连续求…...

PHP中的飞碟运算符、取反运算符、对比非ASCII字符串、对比浮点数操作

对比浮点数 在电脑里存储的浮点数可能会和输入的值有些许差异,比如输入的是10.0,但存储的是10.00001. 在比较两个浮点数是否相等时可以计算下两个数的差值,然后查看下两数之差是否小于可以接受的阈值,如果要求精度在小数点后5位的…...

unity-unity2d基础操作笔记(二)0.5.0

unity2d基础操作笔记 五十一、canvas中的必须熟悉的属性五十二、如何调整canvas与游戏人物大小近似大小五十三、canvas中的canvas scaler介绍【概念】五十四、ui scale mode介绍【概念】五十五、为什么创建image后,canvas的范围要要远远大于游戏世界?五十六、图片常用操作【技…...

Feign远程调用(学习笔记)

先来看我们以前利用RestTemplate发起远程调用的代码: 存在下面的问题: ●代码可读性差,编程体验不统一 ●参数复杂URL难以维护 Feign是一个声明式的http客户端,官方地址:https://github.com/OpenFeign/feign 其作用…...

pytorch建模的三种方式

# 可以使用以下3种方式构建模型: # # 1,继承nn.Module基类构建自定义模型。 # # 2,使用nn.Sequential按层顺序构建模型。 # # 3,继承nn.Module基类构建模型并辅助应用模型容器进行封装(nn.Sequential,nn.ModuleList,nn.ModuleDict…...

GO-ICP的使用(一)

一、代码下载以、修改以及使用 下载: 链接:yangjiaolong/Go-ICP: Implementation of the Go-ICP algorithm for globally optimal 3D pointset registration (github.com) 解压之后 : 首先visual studio项目,配置好PCL环境&…...

FPS游戏漫谈System.GC.Collect()强制进行垃圾回收

在Unity中,System.GC.Collect()用于强制进行垃圾回收,但是它是一个相当耗时的操作,可能会导致游戏的帧率下降,甚至出现卡顿。因此,你应该尽量避免在游戏的主循环中频繁调用它。以下是一些关于在Unity中使用System.GC.C…...

第3集《灵峰宗论导读》

《灵峰宗论》导读。诸位法师,诸位同学,阿弥陀佛!(阿弥陀佛!) 请大家打开讲义第5面,悟道。 这一科我们是说明论主略史,在这一科当中,我们根据弘一大师所编的《蕅益大师年…...

java面试设计模式篇

面试专题-设计模式 前言 在平时的开发中,涉及到设计模式的有两块内容,第一个是我们平时使用的框架(比如spring、mybatis等),第二个是我们自己开发业务使用的设计模式。 面试官一般比较关心的是你在开发过程中&#…...

桥接模式:解耦抽象与实现,实现灵活多变的扩展结构

文章目录 一、引言二、应用场景与技术背景三、模式定义与实现四、实例详解五、优缺点分析总结: 一、引言 ​ 桥接模式是一种结构型设计模式,它将抽象部分与它的实现部分分离,使它们可以独立变化。这种模式通过创建一个抽象层和实现层的结构&…...

HUAWEI Programming Contest 2024(AtCoder Beginner Contest 342)

D - Square Pair 题目大意 给一长为的数组,问有多少对,两者相乘为非负整数完全平方数 解题思路 一个数除以其能整除的最大的完全平方数,看前面有多少个与其余数相同的数,两者乘积满足条件(已经是完全平方数的部分无…...

Heap sorting

堆排序比较特殊&#xff0c;采用数组表示堆。 先将数组表示成大根堆或者小根堆。然后从堆中依次取根&#xff0c;最后形成有序序列。 #include<bits/stdc.h> using namespace std;const int N 1e5 10; int a[N];void bigheap(int* a, int start, int len) {if(start …...

开源模型应用落地-qwen2模型小试-入门篇(六)

一、前言 经过前五篇“qwen模型小试”文章的学习,我们已经熟练掌握qwen大模型的使用。然而,就在前几天开源社区又发布了qwen1.5版本,它是qwen2模型的测试版本。在基于transformers的使用方式上有较大的调整,现在,我们赶紧跟上脚步,去体验一下新版本模型的推理质量。 二、…...

c#程序,oracle使用Devart驱动解决第第三方库是us7ascii,数据乱码的问题

最近做项目&#xff0c;要跟对方系统的库进行读写&#xff0c;结果发现对方采用的是oracle的us7ascii编码&#xff0c;我们系统默认采用的是ZHS16GBK&#xff0c;导致我们客户端读取和写入对方库的数据都是乱码&#xff0c;搜索网上&#xff0c;发现需要采用独立的oracle驱动去…...

代码随想录算法训练营第四一天 | 背包问题

目录 背包问题01背包二维dp数组01背包一维 dp 数组&#xff08;滚动数组&#xff09;分割等和子集 LeetCode 背包问题 01背包 有n件物品和一个最多能背重量为 w 的背包&#xff0c;第i件物品的重量是weight[i]&#xff0c;得到的价值是value[i] 。每件物品只能用一次&#x…...

AIDL的工作原理与使用示例 跨进程通信 远程方法调用RPC

AIDL的介绍与使用 AIDL&#xff08;Android Interface Definition Language&#xff09;是Android中用于定义客户端和服务端之间通信接口的一种接口定义语言。它允许你定义客户端和服务的通信协议&#xff0c;用于在不同的进程间或同一进程的不同组件间进行数据传递。AIDL通过…...

塘沽网站建设/深圳网络广告推广公司

在 开发Maven 项目的时候&#xff0c;会发现个问题&#xff0c;就是下载下来的项目默认 compiler 为1.5 &#xff0c;项目报错。 明明之前开发用的是1.7的啊。 这里只需要在pom.xml确定下就好了。 <properties><project.build.sourceEncoding>UTF-8</project.bu…...

学院的网站建设的er图怎么画/百度网站

公众号关注 “GitHubDaily”设为 “星标”&#xff0c;每天带你逛 GitHub&#xff01;转自机器之心LaTex 是很多人在写论文时使用的方便工具&#xff0c;但是如何将书本上的公式直接转换为 LaTex 格式呢&#xff1f;近日&#xff0c;一位中国开发者开源了这样一款工具。用户可以…...

跨境电商平台b2b代表有哪些/淘宝优化

讨论&#xff1a;linux 下socket客户端崩溃后连接不上服务器问题(2012-06-07 02:33:21)标签&#xff1a;服务器客户端杂谈讨论&#xff1a;linux 下socket客户端崩溃后连接不上服务器问题 本帖最后由 fantansy 于 2010-10-28 17:16编辑最近写一个客户端程序&#xff0c;负责向服…...

建站做网站/趣丁号友情链接

网络拓扑 试验环境&#xff1a; 网络中计算机和路由器的IP地址已经如图配置完成。 试验要求 你需要配置路由器使用RIP学习路由表。 指定路由器使用第二版的路由协议 能够查看使用RIP协议学习到的路由表 测试网络连通性 能够监控RIP协议交换路由信息 实验配置详解 在所有路由器上…...

百度网站免费电话/网站排名软件推荐

Fun 0 直接获取日期再次计算时间戳 function fun00(){let today new Date();return new Date(today.toDateString()).getTime();} 复制代码function fun01(){let today new Date();return new Date(today.getFullYear()/today.getMonth()1/today.getDate()).getTime();} 复制…...

做代购需要什么网站/百度获客

开始于2020年6月15日 方法str.title()以首字母大写的方式显示每个单词 name "ada lovelace" print(name.title()) # Ada Lovelace 方法str.upper()和str.lower() name "Ada Lovelace" print(name.upper()) # ADA LOVELACE print(name.lower()) # ada lov…...