【DataWhale学习】用免费GPU线上跑chatGLM、SD项目实践

用免费GPU线上跑chatGLM、SD项目实践

​ DataWhale组织了一个线上白嫖GPU跑chatGLM与SD的项目活动,我很感兴趣就参加啦。之前就对chatGLM有所耳闻,是去年清华联合发布的开源大语言模型,可以用来打造个人知识库什么的,一直没有尝试。而SD我前两天刚跟着B站秋叶大佬和Nenly大佬的视频学习过,但是生成某些图片显存吃紧,想线上部署尝试一下。

参考:DataWhale 学习手册链接

1 学习简介

本文以趋动云平台为例,详细介绍下如何通过平台提供的在线开发环境,直接在云端编写、运行代码,并使用**GPU资源进行加速**。本教程将学习云算力资源的使用方式,并给出了两个AI项目实践:

  • 用免费GPU创建属于自己的聊天GPT
  • 用免费GPU部署自己的stable-diffusion

平台注册:

  • 注册即送168元算力金
  • Datawhale专属注册链接:https://growthdata.virtaicloud.com/t/SA

适用人群

  • 新手开发者、快速原型设计者;
  • 需要协作和分享的团队;
  • 对大模型部署感兴趣的人;
  • 深度学习入门学习者;
  • 对使用GPU资源有需求的人。

优势:

无需进行本地环境配置,简单易用,便于分享和协作。

**组织方:**Datawhale x 趋动云

2 云端部署chatGLM3-6B模型

ChatGLM3 是智谱AI和清华大学 KEG 实验室联合发布的新一代对话预训练模型。

推理速度比上一代提高了很多,虽然本教程有两种启动方式,但教程作者强烈推荐使用streamlit体验,效果极佳。

2.1 项目配置

本项目采用 趋动云 云端配置,环境采用 Pytorch2.0.1、python3.9、cuda11.7 的镜像,在公开模型选择 葱姜蒜上传的这个ChtaGLM3-6B模型

资源配置采用拥有24G显存的 B1.large ,最好设置一个最长运行时间,以免忘关环境,导致资源浪费。我这里选择了24h的最长运行时间。

2.2 环境配置

成功配置好项目基本资源后,就可以进入JupyterLab开发环境了。现在需要在终端进一步配置环境,通过我们选择的模型资源中的加载的文件,我们首先要设置镜像源、克隆ChatGLM项目。

  1. 升级apt,安装unzip

    apt-get update && apt-get install unzip
    
  2. 设置镜像源,升级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
    
  3. 克隆项目,并进入项目目录

    git clone https://github.com/THUDM/ChatGLM3.git
    cd ChatGLM3
    
  4. 安装项目依赖与peft

    可以先把requirements.txt中的torch删掉,避免重复安装

    pip install -r requirements.txt
    pip install peft
    

2.2 镜像发布

​ 通过以上步骤,项目环境已部署完成啦。但是为了防止下次加载还得重新装载镜像,此时可以将镜像封装发布。

  1. 点击右上角将当前环境制作为镜像

    image-20240311114056429

  2. 填写镜像名称,构建镜像

    填写自定义镜像名称后,在Dockerfile中,填写以下内容,以之前选择的基础镜像,创建镜像。

    image-20240311171511654

    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
    
  3. 等待镜像构建

    image-20240311114257441

    image-20240311114320543

  4. 在开发环境实例中修改镜像

    在构建的项目中,点击右边栏的 开发 ,点击 修改挂载镜像 ,在 我的 里选择刚才创建的镜像。

    image-20240311114509586

2.4 通过 Gradio 创建ChatGLM交互界面

Gradio是一个开源的Python库,用于创建机器学习模型的交互式界面。其中,StableDiffusion的WebUI就是通过 Gradio 开发。

  1. 修改模型目录

    basic_demo 文件夹中的 web_demo_gradio.py 的模型加载路径改为 /gemini/pretrain

    20240311output

  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
    

    等待模型慢慢加载完毕,即可访问gradio页面。

  5. 访问gradio页面

    加载完毕之后,复制外部访问的连接,到浏览器打打开

    打开后界面如下,可以再input输入框进行问答测试。

    image-20240311124022630

    可以看到,Gradio界面并不稳定,回答的结果有点"抽风",回复中夹杂指令字符<|im_end|><|im_start|>,并且出现了自问自答的现象。

配置好环境后,再次访问,在终端输入以下指令直接运行 gradio 。

cd ChatGLM3/basic_demo
python web_demo_gradio.py

2.5 通过 streamlit 创建ChatGLM交互界面

如果你运行了gradio,需要先杀掉这个进程,不然内存不够。

CTRL+C 可以杀掉进程

  • Streamlit是一个开源的Python库,它允许用户 快速创建 交互式的数据科学和机器学习Web应用程序。

  • 与Gradio相比,Streamlit在用户体验设计上更为通用,适合广泛的应用场景,而Gradio则更专注于展示和交互机器学习模型。

根据以下步骤,创建 streamlit 交互界面。

  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界面

    复制外部访问地址到浏览器打开,之后模型才会开始加载。(不复制在浏览器打开是不会加载的!)

    image-20240311131049872

    出现以上界面,等待加载,加载结束后工作台后端画面如下。可以在输入框提问。

    image-20240311131208656

    可以看到,streamlit界面的问答,比Gradio的问答稳定的多,没有多余的符号与自问自答。

    image-20240311131423451

配置好环境后,再次访问,在终端输入以下指令直接运行 streamlit 。

cd ChatGLM3/basic_demo
streamlit run web_demo_streamlit.py --server.port 7000

2.6 chatGLM功能测试

可以看到,chatGLM侧边栏有三行可调节参数,其功能分别如下:

  • Max_length(最大长度): 这个参数决定了模型生成文本的最大长度。如果输入文本特别长,可能需要调整这个参数以避免截断数据,确保模型能够理解完整的上下文信息。
  • Top_P(Top P采样): 这是一个概率阈值,模型在生成文本时只考虑累积概率达到这个阈值的词汇。较高的Top P值意味着模型在生成时会考虑更多的词汇,从而增加文本的多样性。
  • Temperature(温度): 这个参数控制生成文本的随机性。较低的温度值会使模型生成更确定性、更可预测的文本,而较高的温度值则会使模型生成更多样化和创造性的文本。

下面分别测试以上3个方面对生成文本的影响。

2.6.1 测试max_length对生成文本的影响

​ max_length决定了模型生成文本的最大长度。于是本次测试决定让模型回答固定长度的答案,一次超过max_length,一次没有对比其对生成文本的影响。

  1. max_length较大时,生成500字的作文

    image-20240311133450424

    可以看到成功生成了一篇大约500字的作文。

  2. max_length较小时,生成500字的作文

    image-20240311133351286

​ 可以看到,max_length有效的控制了生成的字数,当要求生成的字数小于max_length,生成的文章将会被截断。

2.6.2 测试Top_P对生成文本的影响

​ Top P影响着文本的多样性。即值越大用词越丰富,值越少越词穷。本次测试让模型生成一个旅游规划,对比不同Top P的值对生成文本的影响。

  1. Top_P较大时,生成泰山旅游行程

    b58f9c8037f4f7c62dd4199eabd270d

  2. Top_P较小时,生成泰山旅游行程

    001603c8a83d9a136ec4da22bbfdbe3

​ 可以看到,在Top P值较大时,生成的旅游规划较为详细,每日都有不同的行程。而Top P较小时,生成的旅游规划十分简单,而且还出现了 “专线 bus”、"泰山 train"这种不伦不类的用词。

2.6.3 测试Temperature对生成文本的影响

​ Temperature控制着生成文本的随机性。即值越小回答越死板,值越大回答越丰富。这个参数和Top P其实有点相似,经过查阅资料得知:

当 temperature 设置为较高值(接近1或大于1)时,模型在选择下一个 token 时,会倾向于选择概率较低的选项,从而产生更具创新性和多样性的输出。

当 temperature 设置为较低值(接近0但大于0)时,模型在选择下一个 token 时,会更偏向于选择概率较高的选项,从而产生更准确、更确定性的输出。

​ 所以,本次选择一个大语言模型表现不太的领域——数学,来考察 temperature 对生成文本的影响。

  1. Temperature较大时,对年龄计算题的回答

    a5afc2777eeceab876535f046418c19

  2. Temperature较小时,对年龄计算题的回答

    bf4f80b97bc9c2f6bbc06ca7d8594c2

​ 可以看到,当 temperature 值较大时,回答的答案有推理思路,联想能力强,得到了正确的回答,而 temperature 值较小时,回答仅仅把题干中两个数字相加,未能理解题目的真正含义,死板的回复了错误的答案。

3 云端部署StableDiffusion模型

3.1 项目配置

  1. 创建项目

    在趋动云用户工作台中,点击 快速创建 ,选择 创建项目,创建新项目。

  2. 镜像配置

    选择 趋动云小助手AUTOMATIC1111/stable-diffusion-webui 镜像。

    image-20240311172651842

  3. 数据集配置

    公开 数据集中,选择 stable-diffusion-models 数据集。

    1710149308792

    配置完成后,点击创建,要求上传代码时,选择 暂不上传

  4. 初始化开发环境

    找到最右侧 “开发”-> “初始化开发环境实例”,我这里没按教程配置,因为SD生图需要较大显存,我选择了拥有24G显存的 B1.large,其他按教程一样,并设置了24h的最长运行时间。

    image-20240311173442914

3.2 环境配置

​ 因为数据集代码有所变化,所以教程中有些步骤可以省略,以下为具体步骤。

  1. 解压代码及模型

    tar xf /gemini/data-1/stable-diffusion-webui.tar -C /gemini/code/ 
    
  2. 拷贝frpc内网穿透文件

    chmod +x /root/miniconda3/lib/python3.10/site-packages/gradio/frpc_linux_amd64_v0.2
    
  3. 拷贝模型文件到项目目录下

    cp /gemini/data-1/v1-5-pruned-emaonly.safetensors /gemini/code/stable-diffusion-webui/
    
  4. 更新系统httpx依赖

    pip install httpx==0.24.1
    
  5. 运行项目

    cd /gemini/code/stable-diffusion-webui && python launch.py --deepdanbooru --share --xformers --listen
    

    运行项目后,点击右侧添加,创建 外部访问链接

    1710149802068

  6. 访问StableDiffusion的WebUI

    复制外部访问链接,在浏览器粘贴并访问,就成功打开WebUI界面啦。

    1710149919322

  7. 生成镜像

    点击右上角 将当前环境制作为镜像,点击 智能生成,在 AUTOMATIC1111/stable-diffusion-webui 基础镜像下生成,点击 构建,完成对镜像的构建。

    image-20240311175121573

    之后安装上一章的步骤,将镜像配置到你的项目里就好啦。

配置好环境后,再次访问,在终端输入以下指令直接运行 WebUI 。

cd /gemini/code/stable-diffusion-webui && python launch.py --deepdanbooru --share --xformers --listen

3.3 StableDiffusion 使用

  1. 生成第一张美图

    部署好了当然是要生成一张图,我选择生成一张猫猫图,结果如下。

    image-20240312104308881

    ​ 库自带的模型是 v1-5-pruned-emaonly 模型,这个模型是官方的1.5 版本预训练模型,是在512*512的小尺寸图像上训练的,所以说如果图像尺寸超过1000的话,容易出现多头多人的情况。

    ​ 在这里我选择的参数与提示词如下:

    • 提示词(prompt)

      1 cat
      
    • 负面提示词(Negative prompt)

      out of frame,(worst quality, low quality, normal quality:2),text,bad eyes,weird eyes closed eyes,badhandv4:0.8,OverallDetail,render,bad quality,worst quality,signature,watermark,extra limbs,
      
    • 迭代步数(Steps)采样器(Sampler)提示词相关性(CFG scale)

      Steps: 20, Sampler: DPM++ SDE Karras, CFG scale: 7, 
      
    • 随机种子(Seed)图像尺寸(Size)模型(Model)

      Seed: 3052626755, Size: 384x512, Model hash: 6ce0161689, Model: v1-5-pruned-emaonly, Version: v1.6.0
      

    生成的猫猫图如下:

    img

  2. 批量生成

    我想要更多的猫猫图,于是增大了生成的 Batch CountBatch size,生成结果如下。

    image-20240312111137432

    可以看到一下生成了16张猫猫图,它实际上是分了两批,每批生成8张,这样生成的。Batch count 控制了生成批次的数量,Batch size 控制每批生成图片的数量。Batch size 越大对显卡显存要求越高,当然白嫖的24g显存不在话下了。

    img

    可以看到生成的图像各有千秋,甚至有的生成了个房子(太离谱了),所以选择合适的种子很重要。可以通过批量生成找到自己喜欢的图像风格的种子,固定下来进行进一步操作。

    我很喜欢第四张,大脸狸花猫,于是点开图片,可以在图片下方看到种子号 2617670965

    image-20240312112233897

  3. 图像放大

    我想放大刚才选中的大脸狸花猫图,可以通过固定种子,并通过 Hires fix 的方法放大生成图像。

    我想使用一个名为 R-ESRGAN4x 的放大算法,从云平台下载太慢了,选择从 该github链接 本地下载,并放在/gemini/code/stable-diffusion-webui/models/RealESRGAN/RealESRGAN_x4plus.pth路径下。

    设置以下参数,重新生成,结果如下。

    image-20240312113245064

    成功将图像尺寸放大到原来的两倍,即 768*1024 的尺寸。图像参数如下:

    1 cat
    Negative prompt: out of frame,(worst quality, low quality, normal quality:2),text,bad eyes,weird eyes closed eyes,badhandv4:0.8,OverallDetail,render,bad quality,worst quality,signature,watermark,extra limbs,
    Steps: 20, Sampler: DPM++ SDE Karras, CFG scale: 7, Seed: 2617670965, Size: 384x512, Model hash: 6ce0161689, Model: v1-5-pruned-emaonly, Denoising strength: 0.35, Hires upscale: 2, Hires upscaler: R-ESRGAN 4x+, Version: v1.6.0
    

    猫猫图如下:

    00019-2617670965

    效果还不错,不过我还想让他更清晰一点,于是选择让他放大4倍,结果如下。

    img

    可以看到,真的清晰了不少。

  4. 图生图

    图生图就是以给的图片为基准,生成其他的图片,我就像用刚才生成的猫猫图,来生成一个宇宙的星系,于是写了以下的提示词。

    stars,out space,galaxy,
    

    负面提示词不变,分两个批次生成16张星系图片,结果如下。

    image-20240312123732068

    可以看到,生成了具有猫猫形状的星系图案,我从中挑了一张最喜欢的,就是下面这张。

    img

    图片参数如下:

    stars,out space,galaxy,
    Negative prompt: out of frame,(worst quality, low quality, normal quality:2),text,bad eyes,weird eyes closed eyes,badhandv4:0.8,OverallDetail,render,bad quality,worst quality,signature,watermark,extra limbs,
    Steps: 20, Sampler: DPM++ 2M Karras, CFG scale: 3, Seed: 3318537879, Size: 768x1024, Model hash: 6ce0161689, Model: v1-5-pruned-emaonly, Denoising strength: 0.7, Version: v1.6.0
    

    以上就尝试玩SD的基本功能啦,之后可以再玩一些进阶玩法,用更厉害的模型,添加lora、ControlNet等插件,生成更可控好看的图片。

3.4 安装插件

​ 因为云平台版本原因,没办法直接安装插件、模型,会以下报错。

image-20240316195001576

​ 于是只能靠自己上传文件,或者从公共平台找合适的数据集。从公共数据集可以找到这个数据集,里面有许多常用的 扩展 和 模型 ,如常用的 麦橘真实majicmixRealistic v7.safetensor

image-20240316213406488

​ 还有这个数据集,里面也有许多插件。

image-20240316214403436

​ 或者可以自己上传数据集,通过STFP上传文件。

这时候,就可以通过其他模型来绘制更好看的图像,比如输入以下提示词,绘制图像如下。

1 girl,happy,real,
Negative prompt: out of frame,(worst quality, low quality, normal quality:2),text,bad eyes,weird eyes closed eyes,OverallDetail,render,bad quality,worst quality,signature,watermark,extra limbs, bad-hands-5,bad_prompt_version2-neg
Steps: 20, Sampler: DPM++ SDE Karras, CFG scale: 2, Seed: 2137894007, Size: 768x1024, Model hash: 7c819b6d13, Model: majicmixRealistic_v7, Version: v1.6.0

image-20240316220422936

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

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

相关文章

Apache James数据库存储用户信息的密码加密问题

项目场景 Apache James邮件服务器使用数据库来存储用户信息的密码加密问题&#xff1a; 将James的用户改为数据库存储James密码是如何加密验证的 1.将James的用户改为数据库存储 1、修改存储方式 找到james-2.3.2\apps\james\SAR-INF\config.xml 找到<users-store>标…

elementUI(Vue2)和elementPlus(Vue3)图标icon差异

Vue2用法 <i class"el-icon-edit"></i><el-button type"primary" icon"el-icon-search">搜索</el-button> Vue3用法 <!-- 使用 el-icon 为 SVG 图标提供属性 --> <template><div><el-icon :siz…

HarmonyOS实战开发-编写一个分布式邮件系统

概述 本篇Codelab是基于TS扩展的声明式开发范式编程语言编写的一个分布式邮件系统&#xff0c;可以由一台设备拉起另一台设备&#xff0c;每次改动邮件内容&#xff0c;都会同步更新两台设备的信息。效果图如下&#xff1a; 说明&#xff1a; 本示例涉及使用系统接口&#xff…

【数据结构】——排序之冒泡排序

&#x1f49e;&#x1f49e; 前言 hello hello~ &#xff0c;这里是大耳朵土土垚~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#x…

视频讲解|基于非对称纳什谈判的多微网电能共享运行优化策略

1 主要内容 该讲解视频对应的程序链接为基于非对称纳什谈判的多微网电能共享运行优化策略_吴锦领&#xff0c;主要内容是对《基于非对称纳什谈判的多微网电能共享运行优化策略》的matlab复现&#xff0c;解决的是微网间基于非对称纳什谈判的P2P电能交易共享问题&#xff0c;基…

SpringBoot接口防止重复提交(AOP+Redis)

方法一&#xff1a; 若依框架的实现 【具体靠请求地址URL参数列表来判断请求是否重复】 SpingBoot接口防止重复提交_springboot接口防抖(防重复提交)的一些实现方案-CSDN博客文章浏览阅读518次。3.根据缓存键获取缓存中对象&#xff0c;如果存在&#xff0c;判断当前请求参…

利用scipy求解方程组、拟合直线、圆、椭圆、抛物线

scipy.optimize作为优化模块可以实现任意曲线拟合&#xff0c;方程求根、非线性方程组求解、自定义代价函数求解等功能&#xff0c;下面给出了optimize中常用的几个子模块&#xff1a; minimize&#xff1a;需要自己构建代价函数&#xff08;有时也称损失函数&#xff0c;目标函…

MATLAB中的数学建模:基础知识、实例与方法论

前言 在当今科技高速发展的时代&#xff0c;数学建模成为了解析复杂世界的关键工具&#xff0c;而MATLAB作为一种专业的科学计算软件&#xff0c;为我们提供了强大的数学建模平台。MATLAB不仅仅是Matrix Laboratory的简称&#xff0c;更是一个集数值分析、矩阵计算、算法开发和…

我的电脑win11系统安装了谷歌浏览器,桌面的快捷方式打不开

安装好浏览器以后双击打不开右键打开文件位置也弹窗报错提示 但是我发现开始栏里面可以打开 说明我的软件应该是没有问题的&#xff0c;研究了一下 我实际的安装目录在&#xff1a;C:\Program Files\Google\Chrome\Application 桌面的快捷方式右键查看属性显示的地址却不对&a…

什么是单点登录?

单点登录&#xff08;Single Sign On&#xff0c;简称 SSO&#xff09;简单来说就是用户只需在一处登录&#xff0c;不用在其他多系统环境下重复登录。用户的一次登录就能得到其他所有系统的信任。 为什么需要单点登录 单点登录在大型网站应用频繁&#xff0c;比如阿里旗下有淘…

JavaEE 初阶篇-深入了解进程与线程(常见的面试题:进程与线程的区别)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 进程概述 2.0 线程概述 2.1 多线程概述 3.0 常见的面试题&#xff1a;谈谈进程与线程的区别 4.0 Java 实现多线程的常见方法 4.1 实现多线程方法 - 继承 Thread 类…

理解文件操作

1. 为什么使⽤⽂件&#xff1f; 如果没有⽂件&#xff0c;我们写的程序的数据是存储在电脑的内存中&#xff0c;如果程序退出&#xff0c;内存回收&#xff0c;数据就丢失了&#xff0c;等再次运⾏程序&#xff0c;是看不到上次程序的数据的&#xff0c;如果要将数据进⾏持久化…

Visual Studio 插件 AnAPI++ for VS 2022

Anmial API abbreviation AnAPIis an automatically generated WebAPI project that has encapsulated Jwt Oauth2 token authentication, SqlSugar, Swagger, Nlog, Cross domain technologies, and supports Net6 and above versions Anmial API缩写AnAPI是一个自动生成的Web…

基于SpringBoot和HeatMap的全球地震热力图可视化实践

目录 前言 一、关于热力图 1、HeatMap简介 2、属性和方法介绍 二、全球地震热力图反演 1、地震信息查询开发 2、前端地图开发 三、地震带反演成果 1、三大地震带反演 2、地震区域分析 总结 前言 众所周知&#xff0c;全球的地震带主要可以分为三处地震带——环太平洋地…

60、服务攻防——中间件安全CVE复现weblogicJenkinsGlassFish

文章目录 weblogicJbossJenkinsGlassFish weblogic 默认端口&#xff1a;7001&#xff0c;历史漏洞&#xff1a;CVE_2017_3506、CVE_2018_2893、CVE_2018_3245、CVE_2020_14882、CVE_2021_2394 Jboss 历史漏洞&#xff1a;CVE-2017-12149、CVE-2017-7504 Jenkins GlassFis…

使用jupyter-Python进行模拟股票分析

tushare财经数据接口包 pip install tushare作用&#xff1a;提供相关指定的财经数据 需求&#xff1a;股票分析 使用tushare包获取某股票的历史行情数据 输出该股票所有收盘比开盘上涨3%以上的日期 输出该股票所有开盘比前日收盘跌幅超过2%的日期 假如我从2015年1月1日开…

哨兵位、链表的链接

哨兵位&#xff1a; 通俗的话讲就是额外开辟一块空间&#xff0c;指向链表的头部。 合并两个有序链表 已解答 简单 相关标签 相关企业 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a; 输入&#…

Jupyter R绘图 汉字显示乱码的解决办法

1.Jupyte中&#xff0c;R绘图&#xff0c;汉字显示乱码 2.如何解决&#xff1f; (1)R中安装showtext 登录linux服务器 #R > install.packages(“showtext”) … 出错 (2)退出R,安装freetype-config #apt install libfreetype6-dev 出错 &#xff08;3&#xff09;进入R&…

学习人工智能:Attention Is All You Need-2-Transformer模型;Attention机制;位置编码

3.2 注意力机制Attention 注意力函数可以描述为将查询和一组键值对映射到输出的过程&#xff0c;其中查询、键、值和输出都是向量。输出被计算为值的加权和&#xff0c;其中每个值的权重由查询与相应键的兼容性函数计算得出。 3.2.1 缩放点积注意力 Scaled Dot-Product Attenti…

鸿蒙Harmony应用开发—ArkTS-@AnimatableExtend装饰器:定义可动画属性

AnimatableExtend装饰器用于自定义可动画的属性方法&#xff0c;在这个属性方法中修改组件不可动画的属性。在动画执行过程时&#xff0c;通过逐帧回调函数修改不可动画属性值&#xff0c;让不可动画属性也能实现动画效果。 可动画属性&#xff1a;如果一个属性方法在animation…