用云服务器构建gpt和stable-diffusion大模型
用云服务器构建gpt和stable-diffusion大模型
- 一、前置知识
- 二、用云端属于自己的聊天chatGLM3
- step1、项目配置
- step2、环境配置
- 1、前置知识
- 2、环境配置流程
- step3、创建镜像
- 1、前置知识
- 2、创建镜像流程
- step4、通过 Gradio 创建ChatGLM交互界面
- 1、前置知识
- 2、创建ChatGLM交互界面的流程
- step5、通过 streamlit 创建ChatGLM交互界面
- 1、前置知识
- 2、创建ChatGLM交互界面流程
- 三、用云端属于自己的stable-diffusion
- step1、项目配置
- step2、环境配置
- 1、前置知识
- 2、环境配置流程
参考: DataWhale学习手册链接
一、前置知识
采用云服务器创建项目时,选择平台预先下载的镜像、数据和模型往往可以事半功倍。
- 镜像是一个包含了操作系统、软件、库以及其他运行时需要的所有内容的快照。使用镜像可以快速部署具有相同环境配置的虚拟机实例或容器,无需手动配置每个环境。这样能够确保在不同计算环境中实现环境的一致性,并方便应用程序的部署和迁移。
- 预训练模型则是准备好预训练好的大模型,可以直接下载,可以使用驱动云直接下载好的。或者麻烦点,使用
git lfs clone https://huggingface.co/THUDM/chatglm3-6b
下载模型权重,模型权重数据太大,克隆时间太长。 - 数据,在创建项目时选择数据,可以将需要的数据集直接加载到云端环境中,方便模型训练和验证。
二、用云端属于自己的聊天chatGLM3
step1、项目配置
-
采用 趋动云 云端配置,环境采用
Pytorch2.0.1、python3.9、cuda11.7
的镜像,预训练模型选择葱姜蒜上传的这个ChtaGLM3-6B模型
-
资源配置采用拥有24G显存的 B1.large ,最好设置一个最长运行时间,以免忘关环境,导致资源浪费。
step2、环境配置
成功配置好项目基本资源后,就可以进入JupyterLab开发环境了。现在需要在终端进一步配置环境,通过我们选择的模型资源中的加载的文件,我们首先要设置镜像源、克隆ChatGLM项目。
1、前置知识
-
apt-get
是一个在 Debian 及其衍生发行版(比如 Ubuntu)中用来管理软件包的命令行工具。它的主要作用包括:- 安装软件包:使用
apt-get install
命令可以安装指定的软件包,系统会自动解决依赖关系并下载安装所需的软件包。 - 升级软件包:通过
apt-get upgrade
命令可以升级系统中已安装的软件包到最新版本。系统会检查可用的更新并进行相应的升级操作。 - 移除软件包:使用
apt-get remove
命令可以移除系统中已安装的软件包,同时也会移除其相关的配置文件。 - 清理无用的软件包:通过
apt-get autoremove
命令可以清理掉系统中不再需要的无用软件包。这些软件包通常是因为其他软件的升级或移除而留下来的。 - 更新软件包列表:使用
apt-get update
命令可以更新本地软件包列表,以获取最新的软件包信息,包括可用的更新和安全修复程序。 - 升级发行版:通过
apt-get dist-upgrade
命令可以升级整个发行版,包括进行系统核心的升级。
apt-get
是一个强大的软件包管理工具,可以帮助用户方便地安装、升级、移除软件包,并保持系统中的软件包信息是最新的。 - 安装软件包:使用
-
git config --global url."https://gitclone.com/".insteadOf https://
的作用是将 Git 在使用https://
方式克隆(clone)远程仓库时,自动将 URL 中的https://
替换为https://gitclone.com/
。 -
pip config set global.index-url https://pypi.virtaicloud.com/repository/pypi/simple
设置全局的 PyPI 镜像源为https://pypi.virtaicloud.com/repository/pypi/simple
。PyPI(Python Package Index)是 Python 社区中最大的软件包仓库,开发者可以通过它来获取和安装各种 Python 包。默认情况下,pip 会从官方的 PyPI 仓库中获取包信息和下载包。 -
python3 -m pip install --upgrade pip
的作用是使用 Python 3 自带的 pip 模块来升级当前系统中的 pip 工具到最新版本。python3 -m pip
:使用 Python 3 自带的 pip 模块来执行 pip 相关操作。install --upgrade pip
:安装最新版本的 pip 工具,而--upgrade
标志表示即使已经安装了 pip,也要将其升级到最新版本。 -
pip install -r <requirements_file>
中的-r
选项表示从指定的 requirements 文件中安装所有列出的 Python 包。 -
pip install peft
:为解决大模型微调的一些问题,huggface开源的一个高效微调大模型-PEFT库(它提供了最新的参数高效微调技术,并且可以与Transformers和Accelerate进行无缝集成)-里面实现的方法,主要是针对transformer架构的大模型进行微调,当然repo中有对diffusion模型进行微调的案例
2、环境配置流程
-
升级apt,安装unzip
apt-get update && apt-get install unzip
-
设置镜像源,升级pip
git config --global url."https://gitclone.com/".insteadOf https:// pip config set global.index-url https://pypi.virtaicloud.com/repository/pypi/simple python3 -m pip install --upgrade pip
-
克隆chatGLM3模型的微调模型code
git clone https://github.com/THUDM/ChatGLM3.git
-
进入项目目录
cd ChatGLM3
-
安装项目依赖与peft,即模型代码运行所需要的必备库
由于最开始选择的镜像中包含torch,为避免重复安装,可以先把requirements.txt中的torch删掉
pip install -r requirements.txt pip install peft
step3、创建镜像
由于,我们采用的镜像是系统预制的一些镜像,该镜像不具备保存功能,但是为了防止下次加载还得重新配置环境,可以当前环境制作成镜像,封装发布。
1、前置知识
Dockerfile 是用来构建 Docker 镜像的文本文件。通过 Dockerfile,您可以定义镜像中包含的文件、环境、依赖关系等信息。在 Dockerfile 中,您可以指定一系列指令,Docker 引擎将根据这些指令自动化地构建出一个完整的镜像。
一个典型的 Dockerfile 包含了一系列指令,如 FROM、RUN、COPY、CMD 等,用于描述镜像的构建过程。以下是一些常用的 Dockerfile 指令:
- FROM:指定基础镜像,即构建新镜像所基于的基础镜像。
- RUN:在镜像内执行命令,用于安装软件包、下载文件等操作。
- COPY:将文件从主机复制到镜像内的指定路径。
- CMD:设置容器启动时执行的默认命令或程序。
通过编写 Dockerfile,可以定义容器的环境、运行时配置以及应用程序所需的依赖项,**使得容器的部署和管理变得更加方便和可重复。**一旦编写好 Dockerfile,可以使用 Docker 命令构建镜像,并基于该镜像创建并运行容器。
2、创建镜像流程
-
点击右上角将当前环境制作为镜像
-
填写镜像名称,构建镜像,填写自定义镜像名称后,在Dockerfile中选择智能生成或者直接填写下边内容,以之前选择的基础镜像,创建镜像。
RUN apt-get update && apt-get install unzipRUN git config --global url."https://gitclone.com/".insteadOf https:// RUN pip config set global.index-url https://pypi.virtaicloud.com/repository/pypi/simple RUN python3 -m pip install --upgrade pipRUN pip install accelerate==0.27.2 \ aiofiles==23.2.1 \ altair==5.2.0 \ annotated-types==0.6.0 \ arxiv==2.1.0 \ blinker==1.7.0 \ colorama==0.4.6 \ cpm-kernels==1.0.11 \ dataclasses-json==0.6.4 \ distro==1.9.0 \ fastapi==0.110.0 \ feedparser==6.0.10 \ ffmpy==0.3.2 \ gitdb==4.0.11 \ GitPython==3.1.42 \ gradio==4.21.0 \ gradio_client==0.12.0 \ greenlet==3.0.3 \ h11==0.14.0 \ httpcore==1.0.4 \ httpx==0.27.0 \ huggingface-hub==0.21.4 \ jsonpatch==1.33 \ jupyter_client==8.6.0 \ langchain==0.1.11 \ langchain-community==0.0.27 \ langchain-core==0.1.30 \ langchain-text-splitters==0.0.1 \ langchainhub==0.1.15 \ langsmith==0.1.23 \ latex2mathml==3.77.0 \ loguru==0.7.2 \ markdown-it-py==3.0.0 \ marshmallow==3.21.1 \ mdtex2html==1.3.0 \ mdurl==0.1.2 \ openai==1.13.3 \ orjson==3.9.15 \ packaging==23.2 \ peft==0.9.0 \ protobuf==4.25.3 \ pydantic==2.6.3 \ pydantic_core==2.16.3 \ pydeck==0.8.1b0 \ pydub==0.25.1 \ PyJWT==2.8.0 \ python-multipart==0.0.9 \ regex==2023.12.25 \ requests==2.31.0 \ rich==13.7.1 \ ruff==0.3.2 \ safetensors==0.4.2 \ semantic-version==2.10.0 \ sentence-transformers==2.5.1 \ sentencepiece==0.2.0 \ sgmllib3k==1.0.0 \ shellingham==1.5.4 \ smmap==5.0.1 \ SQLAlchemy==2.0.28 \ sse-starlette==2.0.0 \ starlette==0.36.3 \ streamlit==1.32.0 \ tenacity==8.2.3 \ tiktoken==0.6.0 \ timm==0.9.16 \ tokenizers==0.15.2 \ toml==0.10.2 \ tomlkit==0.12.0 \ transformers==4.38.2 \ typer==0.9.0 \ typing_extensions==4.10.0 \ urllib3==2.2.1 \ uvicorn==0.28.0 \ watchdog==4.0.0 \ websockets==11.0.3 \ zhipuai==2.0.1
-
等待镜像构建
-
构建成功后,在开发环境实例中修改镜像
在构建的项目中,点击右边栏的 开发 ,点击 修改挂载镜像 ,在 我的 里选择刚才创建的镜像。
这样子之后就不用重复配置环境了。
step4、通过 Gradio 创建ChatGLM交互界面
1、前置知识
Gradio 是一个用于快速构建机器学习模型部署的开源库,它可以帮助快速创建简单而强大的交互式界面,用于展示和测试机器学习模型。通过 Gradio,可以轻松地将训练好的模型转化为可视化的 Web 应用程序,无需深度的前端知识。Gradio 提供了一个简单易用的 API,支持各种机器学习框架(如 TensorFlow、PyTorch 等),使得将模型部署为交互式应用变得非常容易。可以定义输入和输出的界面元素,包括文本框、滑块、图像上传等,以便用户与模型进行交互。
2、创建ChatGLM交互界面的流程
-
修改模型目录
双击
basic_demo
编辑web_demo``_gradio``.py
,将加载模型的路径修改为:/gemini/pretrain,如下图所示~ -
2、修改启动代码
接下来还需要修改一段启动代码,将滚动条拉到最后一行,启动代码修改为如下~
demo.queue().launch(share=False, server_name="0.0.0.0",server_port=7000)
-
3、添加外部端口映射
在界面的右边添加外部端口:7000
-
4、运行gradio界面
点击左上选项卡,重新返回终端,运行web_demo_gradio.py
cd basic_demo python web_demo_gradio.py
-
5、访问gradio页面
加载完毕之后,复制外部访问的连接,到浏览器打打开
可以看到,Gradio界面并不稳定,回复中夹杂指令字符
<|im_end|>
与<|im_start|>
。
step5、通过 streamlit 创建ChatGLM交互界面
1、前置知识
Streamlit 是一个用于快速构建数据应用程序的开源 Python 库。它可以帮助数据科学家和开发人员轻松地创建交互式的数据分析和展示界面,而无需深度的前端开发经验。通过 Streamlit,可以使用简单的 Python 脚本来创建数据应用程序,包括数据可视化、机器学习模型展示、文本分析等。Streamlit 提供了各种易于使用的组件,可以让用户快速构建交互式界面,包括图表、表格、滑块、文本框等。同时,Streamlit 还支持实时更新,当用户与应用程序交互时,界面会即时响应并更新展示结果。
2、创建ChatGLM交互界面流程
-
1、修改模型目录
将 basic_demo 文件夹中的 web_demo_streamlit.py 的模型加载路径改为 /gemini/pretrain
-
2、运行streamlit界面
在终端输入以下指令,运行web_demo_stream.py并指定7000端口,这样就不用再次添加外部端口映射啦~
streamlit run web_demo_streamlit.py --server.port 7000
- 3、访问streamlit界面
复制外部访问地址到浏览器打开,之后模型才会开始加载。(不复制在浏览器打开是不会加载的!)
-
4、出现以上界面,等待加载,加载结束后工作台后端画面如下。可以在输入框提问。
三、用云端属于自己的stable-diffusion
step1、项目配置
-
采用 趋动云 云端配置,环境采用 趋动云小助手 的
AUTOMATIC1111/stable-diffusion-webui
镜像,数据选择stable-diffusion-models
数据集 -
资源配置采用拥有24G显存的 B1.large ,最好设置一个最长运行时间,以免忘关环境,导致资源浪费。
step2、环境配置
1、前置知识
-
tar
命令是一个在 Unix 和类Unix操作系统中用来打包和解压文件的命令,其名称源自 “tape archive” 的缩写。-
创建归档文件(打包)
tar cf archive.tar file1 file2 ... # 创建名为 archive.tar 的归档文件,包含指定的文件 tar czf archive.tar.gz directory/ # 创建名为 archive.tar.gz 的归档文件,并使用 gzip 进行压缩
-
c
: 创建一个新的归档文件 -
f
: 指定归档文件的名称 -
z
: 使用 gzip 进行压缩 -
v
: 显示详细的操作过程(可选) -
j
: 使用 bzip2 进行压缩
-
-
提取归档文件(解压)
tar xf archive.tar # 从 archive.tar 中提取文件 tar xzf archive.tar.gz # 解压缩并从 archive.tar.gz 中提取文件
-
x
: 提取文件 -
f
: 指定要提取的归档文件 -
z
: 使用 gzip 进行解压 -
v
: 显示详细的操作过程(可选) -
j
: 使用 bzip2 进行解压
-
-
-
chmod
是一个在 Unix 和类Unix操作系统中用来修改文件或目录权限的命令。其名称源自 “change mode” 的缩写。语法:
chmod [选项] 模式 文件或目录
常用选项:
-R
:递归地应用权限更改到指定的文件或目录,包括子目录中的所有文件和目录。-v
:显示详细的操作过程。-c
:仅在发生更改时显示详细的操作过程。
模式:
-
符号表示法:使用字符 u(所有者)、g(所属组)、o(其他用户)和 a(所有用户)来表示不同的用户类型;
-
加号(+)表示添加权限,减号(-)表示移除权限,等号(=)表示设定权限为指定值;
-
r(读取)、w(写入)、x(执行)分别表示读取、写入和执行权限。
-
python launch.py --deepdanbooru --share --xformers --listen
是一个运行 Python 脚本的命令--deepdanbooru
:这是一个选项标志,可能是脚本中用于启用 DeepDanbooru 模块的功能。它可能是指在运行脚本时开启 DeepDanbooru 相关的功能或配置。--share
:这也是一个选项标志,可能表示在运行脚本时启用分享功能。具体功能和实现方式需要根据脚本的代码和上下文来确定。--xformers
:这是一个选项标志,可能指示脚本在运行时使用 Xformers 模块。具体用途需要查看脚本的实现代码来确认。--listen
:这是一个选项标志,可能指示脚本在运行时监听某个端口或地址,以便接收和处理传入的网络连接或数据。
2、环境配置流程
-
解压代码及模型
将 “stable-diffusion-webui.tar” 文件解压缩到 “/gemini/code/” 目录中。
tar xf /gemini/data-1/stable-diffusion-webui.tar -C /gemini/code/
-
系统给frpc_linux_amd64_v0.2文件添加可执行权限。
chmod +x /root/miniconda3/lib/python3.10/site-packages/gradio/frpc_linux_amd64_v0.2
-
将模型文件从
/gemini/data-1/v1-5-pruned-emaonly.safetensors
拷贝到/gemini/code/stable-diffusion-webui/
项目目录下。cp /gemini/data-1/v1-5-pruned-emaonly.safetensors /gemini/code/stable-diffusion-webui/
-
更新系统httpx依赖
pip install httpx==0.24.1
-
进入到运行文件目录下
cd /gemini/code/stable-diffusion-webui
-
运行项目
运行Python 脚本,并且通过选项参数指定了脚本要启用的功能、模块或配置。
python launch.py --deepdanbooru --share --xformers --listen
当命令窗口出现如下两个网址时表示部署成功,可以复制右侧的外部访问网址访问webui
访问这个网址就可以直接使用啦
相关文章:

用云服务器构建gpt和stable-diffusion大模型
用云服务器构建gpt和stable-diffusion大模型 一、前置知识二、用云端属于自己的聊天chatGLM3step1、项目配置step2、环境配置1、前置知识2、环境配置流程 step3、创建镜像1、前置知识2、创建镜像流程 step4、通过 Gradio 创建ChatGLM交互界面1、前置知识2、创建ChatGLM交互界面…...

备考2024年小学生古诗文大会:历年真题15题练习和独家解析
最近有家长在问如何提高小学生古诗词的知识?如何激发小学生古诗词的学习兴趣?如何提高小学古诗词的学习成绩?如何备考2024年小学生古诗文大会?...我的建议是参加每年一度的小学生古诗词大会(免费参加,无参赛…...

C++之模板
本阶段主要针对C泛型编程和ST技术做详细讲解,探讨C更深层的使用 1.1 模板的概念 模板就是建立通用的模具,大大提高复用性 模板的特点: 模板不可以直接使用,它只是一个框架 模板的通用并不是万能的 1.2 函数模板 C另一种编程思想称为 …...

Ubuntu Flask 运行 gunicorn+Nginx 部署
linux Ubuntu 下运行python 程序出现killed 原因:CPU或内存限制:在华为云上,你可能有CPU或内存使用的限制。例如,如果你使用的是一个固定大小的实例,那么超过该实例的CPU或内存限制可能会导致进程被杀死。 参考&am…...

Tuxera NTFS 2023安装使用教程 Tuxera NTFS破解版 Tuxera NTFS for Mac优惠
对于必须在Windows电脑和Mac电脑之间来回切换的Mac朋友来说,跨平台不兼容一直是一个巨大的障碍,尤其是当我们需要使用NTFS格式的硬盘在Windows和macOS之间共享文件时。因为Mac默认不支持写入NTFS磁盘。 为了解决这一问题,很多朋友会选择很便捷…...

Linux-centos如何搭建yum源仓库
1.本地搭建(无需连接外网) 1.1检查网络配置,及网络连接 打开虚拟机,点击【编辑——虚拟网络编辑器】 点击【仅主机模式】查看子网段是否和局内IP匹配 进入局内,查看网络IP是否在你上述设置的网段内,如果不…...

Vue组件中引入jQuery
两种在vue中引入jQuery的方式 1、普通html中使用jQuery 将jQuer的文件导入到项目中,然后直接使用<script src"jQuery.js"></script>即可。 <script src"jQuery.js"></script> 2、vue组件中使用jQuery 安装依赖 c…...

设计模式 --3:装扮模式
结构图 代码 #include<iostream>using namespace std;class person { public:person() {};person(string name) { this->name name; }virtual void show() {cout << "装扮的:" << this->name << endl;} private:string name; }; //装…...
element-plus中的表单校验
1. 简单校验: 1.1 在script中给出校验规则对象,主要属性名与form对象的属性名一致1.2 一个字段的校验规则可以有多个,值是一个数组,数组中的一个对象就是一条校验规则1.3 主要校验规则: 1.3.1 required:是…...

ros小问题之roslaunch tab补不全新增的功能包
在学习Gazebo这一章节时,通过catkin_create_pkg命令创建了仿真机械臂所需的软件包,创建完成后里面的内容直接拷贝了教材配套的文件,但在roslaunch时,摁tab键补不全新加的包。 重新source catkin_ws/devel/setup.bash不起作用&…...
C#常见的.Net类型(二)
目录 一、在集合中存储多个对象理解集合的选择1.列表2.字典3.堆栈4.队列5.集 二、使用Span、索引和范围Span索引范围 处理类型和属性1.特性2.创建自定义特性3.反射 一、在集合中存储多个对象 处理集合的常见类型 类型描述List动态大小的数组,可以按索引访问Dictio…...

oracle临时表空间不释放
项目报错 nested exception is java.sql.SQLException: ORA-01652: unable to extend temp segment by 128 in tablespace TEMP 原因是临时表空间满了,临时表空间一直增长,未释放导致临时表空间使用率100%。 查询临时表空间使用率 --临时表空间利用率…...

Chapter 13 Techniques of Design-Oriented Analysis: The Feedback Theorem
Chapter 13 Techniques of Design-Oriented Analysis: The Feedback Theorem 从这一章开始讲负反馈Control系统和小信号建模. 13.2 The Feedback Theorem 首先介绍 Middlebrook’s Feedback Theorem 考虑下面负反馈系统 传输函数 Guo/ui G ( s ) u o u i G ∞ T 1 T G…...

科研学习|论文解读——美国政治经济中的权力:网络分析(JASIST, 2019)
论文原题目 Power in the U.S. political economy: A network analysis 摘要 美国政治经济的许多特征产生于大型政治和经济机构之间的互动,然而我们对它们的互动性质和这些机构之间的权力分配知之甚少。在本文中,对总部设在美国的组织的网络进行了详细的…...
常用的git命令
一、常用的git命令 1. 配置 git config --local user.name "xxx" ---仅对当前Git仓库有效。配置信息将保存在当前Git仓库的 .git/config 文件中 local优先级最高,会覆盖其他范围的相同配置 git config --global user.email "xxx" ---全局…...

【AI】用iOS的ML(机器学习)创建自己的AI App
用iOS的ML(机器学习)创建自己的AI App 目录 用iOS的ML(机器学习)创建自己的AI App机器学习如同迭代过程CoreML 的使用方法?软件要求硬件开始吧!!构建管道:设计和训练网络Keras 转 CoreML将模型集成到 Xcode 中结论推荐超级课程: Docker快速入门到精通Kubernetes入门到…...
远程调用初体验笔记
远程调用初体验笔记 微服务架构通常将系统拆分成多个独立的服务单元,每个服务单元都专注于实现特定的业务功能。当一个服务需要使用另一个服务提供的功能时,就可以通过远程调用来实现。 使用步骤 1.步骤 Spring给我们提供了一个RestTemplate工具&#…...

反无人机电子护栏:原理、算法及简单实现
随着无人机技术的快速发展,其在航拍、农业、物流等领域的应用日益广泛。然而,无人机的不规范使用也带来了安全隐患,如侵犯隐私、干扰航空秩序等。为了有效管理无人机,反无人机电子护栏技术应运而生。 目录 一、反无人机电子护栏…...
Java项目利用Redisson实现真正生产可用高并发秒杀功能 支持分布式高并发秒杀
Java中的高并发秒杀场景下我们可以使用redisson来实现高并发秒杀功能, 以下就是一个可用于生产环境的高并发秒杀示例代码: pom依赖 <!-- https://mavenlibs.com/maven/dependency/org.redisson/redisson --><dependency><groupId>org.redisson</groupId&…...
0104行列式的性质-行列式-线性代数
记 D ∣ a 11 a 12 ⋯ a 1 n a 21 a 22 ⋯ a 2 n ⋯ ⋯ ⋯ a n 1 a n 2 ⋯ a n n ∣ D\begin{vmatrix}a_{11}&a_{12}&\cdots &a_{1n}\\a_{21}&a_{22}&\cdots&a_{2n}\\\cdots&\cdots&&\cdots\\a_{n1}&a_{n2}&\cdots&a_{nn}\en…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...

Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...

JVM 内存结构 详解
内存结构 运行时数据区: Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器: 线程私有,程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 每个线程都有一个程序计数…...

GruntJS-前端自动化任务运行器从入门到实战
Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...
动态 Web 开发技术入门篇
一、HTTP 协议核心 1.1 HTTP 基础 协议全称 :HyperText Transfer Protocol(超文本传输协议) 默认端口 :HTTP 使用 80 端口,HTTPS 使用 443 端口。 请求方法 : GET :用于获取资源,…...