手把手教你部署并使用国产开源大模型ChatGLM3-6B

news2024/11/22 6:39:18

前言

部署一个自己的大模型,没事的时候玩两下,这可能是很多技术同学想做但又迟迟没下手的事情,没下手的原因很可能是成本太高,近万元的RTX3090显卡,想想都肉疼,又或者官方的部署说明过于简单,安装的时候总是遇到各种奇奇怪怪的问题,难以解决。本文就来分享下我的安装部署经验,包括本地和租用云服务器的方式,以及如何通过API调用大模型开发自己的AI应用,希望能解决一些下不去手的问题。

ChatGLM3-6B

本次部署使用的的大模型是ChatGLM3-6B,这个大模型是清华智谱研发并开源的高性能中英双语对话语言模型,它凭借创新的GLM(Gated Linear Units with Memory)架构及庞大的60亿参数量,在对话理解与生成能力上表现卓越。

ChatGLM3-6B不仅能够处理复杂的跨语言对话场景,实现流畅的人机互动,还具备函数调用以及代码解释执行的能力。这意味着开发者可以通过API调用,让模型执行特定任务或编写、解析简单的代码片段,从而将应用拓展到更为广泛的开发和智能辅助领域。

ChatGLM3-6B还允许开发者对预训练模型进行定制化微调,让它在某个领域工作的更好,比如代码编写、电商文案编写等。另外开发者还能对模型进行量化,使用较低的数字精度来表示权重,这使得模型可以运行在消费级显卡甚至CPU上。

效果展示

先看两个比较正常的效果:

能正常调用天气工具,记得上下文,这里点个赞!

再画一个满满的爱心,画的也不错。

再看两个跑疯的效果:

我问你天气,你不好好回答就算了,还反过来问我有啥意义,太爱管闲事。

看来ChatGLM对正六边形的感知有误啊,确实它还不能识别这个图像。

虽然有时不那么如人意,不过整体用起来还是有很多可圈可点的地方,就是提示词要好好写一下,不能太凑合。

云环境部署

这里提供两种方法,一是直接使用我已经创建好的镜像,二是自己从基础镜像一步步安装。

使用现有镜像

创建容器实例时镜像选择“社区镜像”,输入 yinghuoai ,选择 ChatGLM3 的最新镜像。

容器实例开机成功后,点击对应实例的 JupyterLab 就能开始使用了。

这个镜像包含三个Notebook,方便我们启动WebUI服务器和API服务器,并进行相关的测试。我将在下文介绍具体的使用方法。

自己手动安装

创建容器实例时我们选择一个基础镜像 Miniconda -> conda3 -> Python 3.10(ubuntu22.04) -> Cuda11.8。

容器实例开机完毕后,点击对应实例的 JupyterLab 进入一个Web管理界面。

在“启动页”这里点击“终端”,进入一个命令窗口。

首先需要设置下网络,用以加速访问Github。这是AutoDL实例才能使用的,本地无效。

source /etc/network_turbo

然后需要把代码下载到本地,使用Git即可。

git clone https://github.com/THUDM/ChatGLM3
cd ChatGLM3

然后创建一个Python的虚拟环境,这样方便隔离不同项目对Python环境的不同要求。这里使用 source activate 激活虚拟环境,很多文章中是 conda activate,这和conda的版本有关系,AutoDL中的版本不支持 conda activate。

conda create -n chatglm3-6b python=3.10.8 
source activate chatglm3-6b

然后使用 uv 安装依赖的程序包。为什么用uv?因为requirements中很多包的版本要求都是 >=,直接使用pip的时候会安装最新的版本,最新的版本往往和开发者使用的版本不同,这会导致一些兼容问题,所以最好就是 == 的那个版本,这个版本能用,而且一般就是开发者使用的版本。

pip install uv
uv pip install --resolution=lowest-direct -r requirements.txt

然后我们还要下载大模型文件,这里从AutoDL的模型库中下载,速度比较快。下边的模型文件是别人分享出来的,我们使用AutoDL提供的一个下载工具进行下载。下载目标目录是/root/autodl-tmp,会自动在这个目录中创建一个名为 chatglm3-6b 的子目录,并保存这些文件。

pip install codewithgpu
cg down xxxiu/chatglm3-6b/config.json -t /root/autodl-tmp
cg down xxxiu/chatglm3-6b/configuration_chatglm.py -t /root/autodl-tmp
cg down xxxiu/chatglm3-6b/gitattributes -t /root/autodl-tmp
cg down xxxiu/chatglm3-6b/model.safetensors.index.json -t /root/autodl-tmp
cg down xxxiu/chatglm3-6b/MODEL_LICENSE -t /root/autodl-tmp
cg down xxxiu/chatglm3-6b/model-00001-of-00007.safetensors -t /root/autodl-tmp
cg down xxxiu/chatglm3-6b/model-00002-of-00007.safetensors -t /root/autodl-tmp
cg down xxxiu/chatglm3-6b/model-00003-of-00007.safetensors -t /root/autodl-tmp
cg down xxxiu/chatglm3-6b/model-00004-of-00007.safetensors -t /root/autodl-tmp
cg down xxxiu/chatglm3-6b/model-00005-of-00007.safetensors -t /root/autodl-tmp
cg down xxxiu/chatglm3-6b/model-00006-of-00007.safetensors -t /root/autodl-tmp
cg down xxxiu/chatglm3-6b/model-00007-of-00007.safetensors -t /root/autodl-tmp
cg down xxxiu/chatglm3-6b/modeling_chatglm.py -t /root/autodl-tmp
cg down xxxiu/chatglm3-6b/pytorch_model.bin.index.json -t /root/autodl-tmp
cg down xxxiu/chatglm3-6b/quantization.py -t /root/autodl-tmp
cg down xxxiu/chatglm3-6b/README.md -t /root/autodl-tmp
cg down xxxiu/chatglm3-6b/tokenization_chatglm.py -t /root/autodl-tmp
cg down xxxiu/chatglm3-6b/tokenizer.model -t /root/autodl-tmp
cg down xxxiu/chatglm3-6b/tokenizer_config.json -t /root/autodl-tmp

最后我们做一个简单的测试,找到这个文件:ChatGLM3/basic_demo/cli_demo.py,修改其中的模型路径为上边的下载路径:/root/autodl-tmp/chatglm3-6b

在终端执行命令:python basic_demo/cli_demo.py,然后我们就可以在终端与大模型进行交流了。

本地环境安装

注意需要13G显存以上的Nvidia显卡,否则跑不起来。这里以Windows系统为例。

这个安装文件比较大,下载时间取决于你的网速,下载成功后按照提示一步步安装就行了。

安装成功后,启动“Anaconda Navigator”,在其中点击“Environments”->“base(root)” ->“Open Terminal”,打开终端。

这是一个命令行工具,我们将主要在这里边通过执行命令安装ChatGLM3-6B。

这里我将程序放到了C盘下的ChatGLM3目录。

cd C:\
git clone https://github.com/THUDM/ChatGLM3
cd ChatGLM3

使用下边的命令创建一个Python的虚拟环境并激活,这样方便隔离不同项目对Python环境的不同要求。

conda create -n chatglm3-6b python=3.10.8 
conda activate chatglm3-6b

然后还需要把相关模型文件下载到本地,为了防止下载方式失效,这里提供多种方法:

(1)下载AutoDL用户分享的模型,执行下边的命令,它会下载到 C:\ChatGLM3\THUDM,速度还可以。

pip install requests
pip install codewithgpu
cg down xxxiu/chatglm3-6b/config.json -t C:\ChatGLM3\THUDM
cg down xxxiu/chatglm3-6b/configuration_chatglm.py -t C:\ChatGLM3\THUDM
cg down xxxiu/chatglm3-6b/gitattributes -t C:\ChatGLM3\THUDM
cg down xxxiu/chatglm3-6b/model.safetensors.index.json -t C:\ChatGLM3\THUDM
cg down xxxiu/chatglm3-6b/MODEL_LICENSE -t C:\ChatGLM3\THUDM
cg down xxxiu/chatglm3-6b/model-00001-of-00007.safetensors -t C:\ChatGLM3\THUDM
cg down xxxiu/chatglm3-6b/model-00002-of-00007.safetensors -t C:\ChatGLM3\THUDM
cg down xxxiu/chatglm3-6b/model-00003-of-00007.safetensors -t C:\ChatGLM3\THUDM
cg down xxxiu/chatglm3-6b/model-00004-of-00007.safetensors -t C:\ChatGLM3\THUDM
cg down xxxiu/chatglm3-6b/model-00005-of-00007.safetensors -t C:\ChatGLM3\THUDM
cg down xxxiu/chatglm3-6b/model-00006-of-00007.safetensors -t C:\ChatGLM3\THUDM
cg down xxxiu/chatglm3-6b/model-00007-of-00007.safetensors -t C:\ChatGLM3\THUDM
cg down xxxiu/chatglm3-6b/modeling_chatglm.py -t C:\ChatGLM3\THUDM
cg down xxxiu/chatglm3-6b/pytorch_model.bin.index.json -t C:\ChatGLM3\THUDM
cg down xxxiu/chatglm3-6b/quantization.py -t C:\ChatGLM3\THUDM
cg down xxxiu/chatglm3-6b/README.md -t C:\ChatGLM3\THUDM
cg down xxxiu/chatglm3-6b/tokenization_chatglm.py -t C:\ChatGLM3\THUDM
cg down xxxiu/chatglm3-6b/tokenizer.model -t C:\ChatGLM3\THUDM
cg down xxxiu/chatglm3-6b/tokenizer_config.json -t C:\ChatGLM3\THUDM

(2)从HuggingFace的镜像下载,地址是:[hf-mirror.com/THUDM/chatg…]

(3)给公众号“萤火架构”发消息 ChatGLM3 获取最新下载方式。

最后我们做一个简单的测试,执行命令:python basic_demo/cli_demo.py,然后我们就可以在终端与大模型进行交流了。

如果程序出现下边的错误:

RuntimeError: “addmm_impl_cpu_” not implemented for ‘Half’

首先确定你的电脑是安装了Nvida显卡的,然后使用下边的命令补充安装相关的pytorch-cuda包。

conda install pytorch==2.1.0 torchvision==0.16.0 torchaudio==2.1.0 pytorch-cuda=11.8 -c pytorch -c nvidia
pip install chardet

使用WebUI体验

ChatGLM提供了一个Web界面,用户可以直接在这个页面上聊天、使用插件,以及执行Python代码,就像使用大多数的大语言模型一样。额外的用户还可以配置一些参数,比如一次生成Token的数量、系统提示词、采样的随机性控制等。

启动WebUI服务

首先修改程序中的模型目录,在下载程序中找到文件 composite_demo/client.py,修改 MODEL_PATH 为你的模型存放地址。

然后进入 ChatGLM3-6B 程序的根目录(根据自己的部署来),激活Python虚拟环境:

cd /root/ChatGLM3
conda activate chatglm3-6b
# conda如果不行就使用 source activate chatglm3-6b

因为需要执行代码,我们还要安装 Jupyter 内核:

ipython kernel install --name chatglm3-6b --user

并修改文件 composite_demo/demo_ci.py 中的 IPYKERNEL 的值为设置的值。

最后启动API服务器:streamlit run composite_demo/main.py 可知这个WebUI使用的是streamlit框架。

如果是在个人电脑上安装的,点击这里的连接就可以在浏览器访问了。

如果是在AutoDL上的实例,还需要再折腾一下。因为这个WebUI使用了WebSocket,但是AutoDL开放的外网端口不支持WebSocket。此时可以通过SSH隧道的方式来打通本地与AutoDL实例的网络。

我们需要类似下边这样的一条指令:

sudo ssh -CNg -L 8501:127.0.0.1:8501 root@connect.westb.seetacloud.com -p 12357

其中的 connect.westb.seetacloud.com 和 10757 需要替换成你自己实例的,在实例列表中复制登录指令。

然后把它随便粘贴到一个地方,就可以得到所需的地址和端口号了:

在个人电脑的终端或者命令行工具执行上边写好的指令,首先需要统一添加主机(输入 yes),然后需要输入主机登录密码,还是从AutoDL的实例列表拷贝。

登录成功后,这个界面会挂起,不会输出任何内容。此时我们在浏览器地址栏输入 [http://127.0.0.1:8501]

使用WebUI

聊天就不用说了,我们看下工具或插件的使用。它会完整的展现出来插件的使用过程,用户询问问题,触发大模型调用插件,展现插件返回的内容,大模型整理插件返回的内容并输出给用户。中间的两个过程这里只是为了方便用户了解原理,其实可以在展现大模型返回值时将它们过滤掉。具体的可以修改这个文件中的第144行-198行:composite_demo/demo_tool.py 。

实例代码中提供了两个工具,一个是获取实时天气,另一个是生成随机数,用户还可以修改代码增加自己的工具插件,在 composite_demo/tool_registry.py 这个文件中。

只需要使用 @register_tool 装饰函数即可完成注册。对于工具声明,函数名称即为工具的名称,函数 docstring 即为工具的说明;对于工具的参数,使用 Annotated[typ: type, description: str, required: bool] 标注参数的类型、描述和是否必须。例如,get_weather 工具的注册如下:

@register_tool
def get_weather(
    city_name: Annotated[str, 'The name of the city to be queried', True],
) -> str:
    """
    Get the weather for `city_name` in the following week
    """
    ...

再看看代码解释器的效果,模型会根据对任务完成情况的理解自动地连续执行多个代码块,直到任务完成。比如让它用Python画一个爱心。

如果代码执行有错误,模型会自动修正错误,然后继续生成,直到能够正常执行成功。这个能力其实是通过系统提示词和observation角色实现的。

在 composite_demo/demo_ci.py 中可以看到提示词:

当程序执行出错的时候,程序会通过observation角色把错误再发给ChatGLM进行分析,然后ChatGLM会修改代码,再重新输出到程序中,最后使用 Jupyter 内核执行代码。

使用API开发应用

使用大模型API,我们可以完全自定义自己的交互页面,增加很多有趣的功能,比如提供联网能力。

这里我们使用的是ChatGLM3-6B自带的一个API示例程序,这个程序中有一个参考OpenAI接口规范开发的API服务,我们可以直接使用OpenAI的客户端进行调用,这避免了很多学习成本,降低了使用难度。

启动API服务

首先修改程序中的模型目录,在下载程序中找到文件 openai_api_demo/api_server.py,修改 MODEL_PATH 为你的模型存放地址。

然后进入 ChatGLM3-6B 程序的根目录(根据自己的部署来),激活Python虚拟环境:

cd C:\ChatGLM3
conda activate chatglm3-6b
# conda如果不行就使用 source activate chatglm3-6b

最后启动API服务器:python openai_api_demo/api_server.py

看到 running on http://0.0.0.0 的提示信息就代表启动成功了。

注意这里的端口号,如果你是在AutoDL部署的程序,需要将端口号修改为6006,然后才能通过AutoDL提供的“自定义服务”在外网访问,端口号在openai_api_demo/api_server.py 文件的最末尾。

修改后重启API服务,然后在AutoDL的容器实例列表中点击“自定义服务”,即可获取外网访问地址。

调用API服务

这里还是以Python为例,首先使用pip安装OpenAI的SDK。

pip install --upgrade openai httpx[socks]

我准备了两个简单的应用示例,一个是简单的聊天程序,另一个是在大模型中使用插件的方法。

# 一个简单的聊天程序

from openai import OpenAI

client = OpenAI(api_key='not-need-key',base_url="http://127.0.0.1:6006/v1")
stream = client.chat.completions.create(
    messages=[{
        "role": "system", "content": "你是一名数学老师,从事小学数学教育30年,精通设计各种数学考试题"
    },{
        "role": "user", "content": "请给我出10道一年级的计算题。"
    }],
    model='chatglm3-6b',
    max_tokens=1024,
    #temperature=0.1,
    top_p=0.3,
    #frequency_penalty=0.5,
    presence_penalty=0.2,
    seed=12345,
    #stop='30年',
    response_format={ "type": "json_object" },
    n=1,
    stream=True
)

for chunk in stream:
    msg = chunk.choices[0].delta.content
    if msg is not None:
        print(msg, end='')

下边是程序的执行结果,大模型理解的很正确,并生成了合理的输出。

再看大模型中使用插件的方法,这里让ChatGLM根据用户要求调用天气函数查询实时天气,注意ChatGLM3-6B调用函数的方法没有支持最新的OpenAI API规范,目前只实现了一半,能通过tools传入函数,但是响应消息中命中函数还是使用的 function_call,而不是最新的 tool_calls

from openai import OpenAI
import json
import requests
import time

# 获取天气的方法
def get_city_weather(param):
    city = json.loads(param)["city"]
    r = requests.get(f"https://wttr.in/{city}?format=j1")

    data = r.json()["current_condition"]
    #print(json.dumps(data))
    temperature = data[0]['temp_C']
    humidity= data[0]['humidity']
    text = data[0]['weatherDesc'][0]["value"]
    return "当前天气:"+text+",温度:"+temperature+ "℃,湿度:"+humidity+"%"

# 天气插件的定义
weather_tool = {
    "type": "function",
    "function": {
        "name": "get_city_weather",
        "description": "获取某个城市的天气",
        "parameters": {
            "type": "object",
            "properties": {
                "city": {
                    "type": "string",
                    "description": "城市名称",
                },
            },
            "required": ["city"],
        },
    }
}

# 创建OpenAI客户端,获取API Key请看文章最后
client = OpenAI(api_key='no-need-key', base_url="http://127.0.0.1:6006/v1")

# 定义请求GPT的通用方法
def create_completion():
    return client.chat.completions.create(
        messages=messages,
        model='chatglm3-6b',
        stream=False,
        tool_choice="auto",
        tools=[weather_tool]
    )

# 我的三个问题
questions = ["请问上海天气怎么样?","请问广州天气怎么样?","成都呢?","北京呢?"]

# 聊天上下文,初始为空
messages=[]

print("---GLM天气插件演示--- ")

# 遍历询问我的问题
for question in questions:  

    # 将问题添加到上下文中
    messages.append({
        "role": "user",
        "content": question,
    })
    print("路人甲: ",question)

    # 请求GPT,并拿到响应
    response_message = create_completion().choices[0].message
    # 把响应添加到聊天上下文中
    messages.append(response_message)
    #print(response_message)
    # 根据插件命中情况,执行插件逻辑
    if response_message.function_call is not None:
        function_call = response_message.function_call
        # 追加插件生成的天气内容到聊天上下文
        weather_info = get_city_weather(function_call.arguments)
        #print(weather_info)
        messages.append({
            "role": "function",
            "content": weather_info,
            "name": function_call.name
        })
        # 再次发起聊天
        second_chat_completion = create_completion()
        gpt_output = second_chat_completion.choices[0].message.content
        # 打印GPT合成的天气内容
        print("GLM: ",gpt_output)
        time.sleep(0.2)
        # 将GPT的回答也追加到上下文中
        messages.append({
            "role": "assistant",
            "content": gpt_output,
        })
    else:
        print("GLM: ",response_message.content)

执行效果如下:


那么,我们该如何学习大模型?

作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

一、大模型全套的学习路线

学习大型人工智能模型,如GPT-3、BERT或任何其他先进的神经网络模型,需要系统的方法和持续的努力。既然要系统的学习大模型,那么学习路线是必不可少的,下面的这份路线能帮助你快速梳理知识,形成自己的体系。

L1级别:AI大模型时代的华丽登场

L2级别:AI大模型API应用开发工程

L3级别:大模型应用架构进阶实践

L4级别:大模型微调与私有化部署

一般掌握到第四个级别,市场上大多数岗位都是可以胜任,但要还不是天花板,天花板级别要求更加严格,对于算法和实战是非常苛刻的。建议普通人掌握到L4级别即可。

以上的AI大模型学习路线,不知道为什么发出来就有点糊,高清版可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

img

三、大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

img

四、AI大模型商业化落地方案

img

作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。

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

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

相关文章

php遇到的问题

1、 underfined at line 3 in xxx.php , 错误提示,注释这行代码 // error_reporting(DEBUG ? E_ALL : 0); 目录:config/config.php

【第四篇】SpringSecurity的HttpSecurity详解

SpringSecurity的XML文件配置 在配置文件中通过 security:http 等标签来定义了认证需要的相关信息 SpringSecurity的HttpSecurity配置 在SpringBoot项目中,脱离了xml配置文件的方式,在SpringSecurity中提供了HttpSecurity等工具类,这里HttpSecurity就等同于在配置文件中定…

LLM大模型的挑战与未来,挑战大但是机遇更大!

大模型必然是未来很长一段时间我们工作生活的一部分,而对于这样一个与我们生活高度同频互动的“大家伙”,除了性能、效率、成本等问题外,大规模语言模型的安全问题几乎是大模型所面对的所有挑战之中的重中之重,机器幻觉是大模型目…

【Numpy】一文向您详细介绍 np.sqrt()

【Numpy】一文向您详细介绍 np.sqrt() 下滑即可查看博客内容 🌈 欢迎莅临我的个人主页 👈这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地!🎇 🎓 博主简介:985高校的普通本硕,曾…

H5单点登录分析介绍(登录状态检验状态透传分析)

文章目录 1、单点登录解决方案1.1、后端保存登录状态1.2、token模式 2、user服务-登录接口2.1、UserController2.2、UserInfoServiceImpl2.3、载荷2.4、响应2.5、Redis Desktop Manager 3、user服务-登录成功获取用户信息回显3.1、UserController3.2、UserInfoServiceImpl3.3、…

FlashDB的TS数据库的标准ANSI C移植验证

本文目录 1、引言2、环境准备3、修改驱动4、验证 文章对应视频教程: 暂无,可以关注我的B站账号等待更新。 点击图片或链接访问我的B站主页~~~ 1、引言 在当今数据驱动的时代,高效可靠的数据存储与管理对于嵌入式系统及物联网(IoT)应用至关重…

DSP教学实验箱_数字图像处理_操作教程:5-1 图像旋转

一、实验目的 学习图像旋转的原理,掌握图像的读取方法,并实现图像旋转。 二、实验原理 图像旋转 图像的旋转是指以图像的某一点为原点以逆时针或顺时针旋转一定的角度。其本质是以图像的中心为原点,将图像上的所有像素都旋转一个相同的角…

Axure中继器交互效果

部件库预览链接: https://ezd11a.axshare.com(请与班主任联系获取原型文档) 支持版本: Axrure RP 8 文件大小: 109KB 文档内容介绍 “翻页”效果 “排序”效果 “全反选”效果 “筛选”效果 “删除”效果 免费领取资料 添加班主任回复 “…

ctfshow-web入门-命令执行(web43-web52)关于黑洞“ >/dev/null 2>1“的处理与绕过

目录 1、web43 2、web44 3、web45 4、web46 5、web47 6、web48 7、web49 8、web50 9、web51 10、web52 1、web43 在上一题 ‘黑洞’ 的基础上新增过滤: preg_match("/\;|cat/i", $c) 问题不大,我们不用分号和 cat 就行:…

Postman接口测试工具详解(高清图例)

一、引言 1. 介绍接口测试的重要性 在当今软件开发领域,接口(API)已成为不同系统、服务或组件之间交互的桥梁。随着微服务架构的普及,接口的重要性日益凸显。然而,接口的复杂性和多样性也带来了诸多挑战,其…

数据结构笔记补充问题

1、假设线性表L采用单链表存储结构,设计一个算法,在L的数据元素最大值之前插入(假设L的各个数据元素值不同)数据元素x。 基本思想,先查找到最大元素对应的结点,再在之前插入x对应的结点; 设计算…

我的创作纪念日(1825天)

Ⅰ、机缘 1. 记得是大一、大二的时候就听学校的大牛说,可以通过写 CSDN 博客,来提升自己的代码和逻辑能力,虽然即将到了写作的第六个年头,但感觉这句话依旧受用; 2、今年一整年的创作都没有停止,本年度几乎是每周都来…

DTU为何应用如此广泛?

1.DTU是什么 DTU(数据传输单元)是一种无线终端设备,它的核心功能是将串口数据转换为IP数据或将IP数据转换为串口数据,并通过无线通信网络进行传送。DTU通常内置GPRS模块,能够实现远程数据的实时传输,广泛应用于工业自动化、远程监…

抓包工具 Wireshark 的下载、安装、使用、快捷键

目录 一、什么是Wireshark?二、Wireshark下载三、Wireshark安装四、Wireshark使用4.1 基本使用4.2 过滤设置1)捕获过滤器2)显示过滤器 4.3 过滤规则1)捕获过滤器-规则语法2)显示过滤器-规则语法 4.4 常用的显示过滤器规…

纵深发力 持续推进,富格林平台发展势头喜人

自2024年2月1日正式上线以来,富格林互联网投融资平台已迅速崛起,吸引了业内专家学者的高度认可以及广大投资者的青睐。平台规模持续扩大,目前累计注册用户已超过10万人,总投资额突破50亿美元。这一卓越表现不仅体现了平台的稳健运营和出色的投资项目,也展示了其在互联网投融资领…

探索Napier:Kotlin Multiplatform的日志记录库

探索Napier:Kotlin Multiplatform的日志记录库 在现代软件开发中,日志记录是不可或缺的部分,它帮助开发者追踪应用的行为和调试问题。对于Kotlin Multiplatform项目而言,能够在多个平台上统一日志记录的方法显得尤为重要。Napier…

在IDEA中连接数据库

1.点击侧边栏的Database 2.选中你要连接的数据库类型 3.输入用户名、密码,测试连接,没有驱动的话先下载下驱动 4.发现没有数据库,点击1 of 14,选择All schemas,即可显示全部数据库 5.执行sql 如果对您有帮助的话记…

【通义灵码-你的智能编程助手】

通义灵码是由阿里云推出的智能编码辅助工具,基于通义大模型,旨在提高开发者的编码效率和流畅度。它具备以下功能: 「通义灵码,助力你高效 AI 编码」 点击前往使用 行级/函数级实时续写:在编码过程中,根据…

k8s 自动伸缩机制-------HPA 超详细解读

目录 在K8s中扩缩容分为两种: 前言 弹性伸缩是根据用户的业务需求和策略,自动“调整”其“弹性资源”的管理服务。通过弹性伸缩功能,用户可设置对定时、周期或监控策略,恰到好处地增加或减少“弹性资源”,并完成实例…

【ASE】笔记总结

这里写自定义目录标题 ASE 介绍ASE 的安装文件格式的转化命令行操作图形界面操作Python代码操作[2]支持的文件转化格式 ASE(三):图形界面查看/建立/修改结构图形界面召唤查看结构 python代码查看/建立结构读写、查看结构建立结构分子 周期性体…