Qwen大模型实践之初体验

Qwen大模型实践之初体验

测试机器, 使用InternStudio提供的开发机,配置如下:

alt

部分资源详细信息:

# CPU
Intel(R) Xeon(R) Platinum 8369B CPU @ 2.90GHz

# GPU
(base) root@intern-studio-50014188:~# studio-smi 
Running studio-smi by vgpu-smi
Wed May 08 10:13:32 2024
+------------------------------------------------------------------------------+
| VGPU-SMI 1.7.13       Driver Version: 535.54.03     CUDA Version: 12.2       |
+-------------------------------------------+----------------------------------+
| GPU  Name                Bus-Id           |        Memory-Usage     GPU-Util |
|===========================================+==================================|
|   0  NVIDIA A100-SXM...  00000000:48:00.0 |     0MiB / 24566MiB    0% /  30% |
+-------------------------------------------+----------------------------------+

# 操作系统
(base) root@intern-studio-50014188:~# cat /etc/issue
Ubuntu 20.04.6 LTS \n \l
# python
(base) root@intern-studio-50014188:~# python3 --version
Python 3.11.5

1. 环境准备

1.1 环境要求

  • python 3.8及以上版本
  • pytorch 1.12及以上版本,推荐2.0及以上版本
  • transformers 4.32及以上版本
  • 建议使用CUDA 11.4及以上(GPU用户、flash-attention用户等需考虑此选项)

1.2 基本环境准备

1.2.1 下载Qwen代码库并安装基础环境
# 下载Qwen代码库,并创建python虚拟环境
(base) root@intern-studio-50014188:~# git clone https://github.com/QwenLM/Qwen.git
(base) root@intern-studio-50014188:~# conda create -n qwen python=3.10
(base) root@intern-studio-50014188:~# conda activate qwen
(qwen) root@intern-studio-50014188:~# cd Qwen/
(qwen) root@intern-studio-50014188:~/Qwen# ls
 FAQ.md      LICENSE                     README.md      README_FR.md                       'Tongyi Qianwen RESEARCH LICENSE AGREEMENT'   cli_demo.py   eval       finetune.py     requirements.txt            tech_memo.md              tokenization_note_zh.md
 FAQ_ja.md   NOTICE                      README_CN.md   README_JA.md                        ascend-support                               dcu-support   examples   openai_api.py   requirements_web_demo.txt   tokenization_note.md      utils.py
 FAQ_zh.md   QWEN_TECHNICAL_REPORT.pdf   README_ES.md  'Tongyi Qianwen LICENSE AGREEMENT'   assets                                       docker        finetune   recipes         run_gptq.py                 tokenization_note_ja.md   web_demo.py
(qwen) root@intern-studio-50014188:~/Qwen# pip install -r requirements.txt

# 遇到错误:
ERROR: tiktoken 0.6.0 has requirement requests>=2.26.0, but you'll have requests 2.22.0 which is incompatible.

# 解决:
pip install requests==2.31.0
1.2.2 安装flash-attenion加速

如果你的显卡支持fp16或bf16精度,我们还推荐安装flash-attention(当前已支持flash attention 2)来提高你的运行效率以及降低显存占用。(flash-attention只是可选项,不安装也可正常运行该项目):

git clone https://github.com/Dao-AILab/flash-attention
cd flash-attention
pip install ninja
pip install .
# 下方安装可选,安装可能比较缓慢。
# pip install csrc/layer_norm
# 如果flash-attn版本高于2.1.1,下方无需安装。
# pip install csrc/rotary

之前使用自己的电脑(win11)直接基于源码安装flash-attenion,会遇到各种问题,上述环境下安装时间较长但是可以安装成功。

1.3 模型下载

模型下载有两种方式,一种是直接运行大模型demo程序,模型会自动下载,该种方式默认会从huggingface进行下载,国内网络无法直接下载或者速度较慢;另外一种就是通过modelscope(由阿里进行维护)进行下载,速度较快。建议通过modelscope下载。

1.3.1 demo程序自动下载

直接运行demo脚本,默认会从huggingface下载模型文件,下载后的路径(以Qwen-7B-Chat为例):

/root/.cache/huggingface/hub/models--Qwen--Qwen-7B-Chat/snapshots/93a65d34827a3cc269b727e67004743b723e2f83/

即使使用InternStudio的环境,下载速度在3-4M左右,对于至少数GB的模型来说速度较慢。

1.3.2 从国内社区进行下载

下面使用python脚本从modelscope下载模型,也可以直接到魔搭官网进行下载后导入到测试机。以下载Qwen-14B-Chat为例:

# 安装modelscope
(qwen) root@intern-studio-50014188:~# pip install modelscope
# 创建如下内容的python脚本
(qwen) root@intern-studio-50014188:~# cat Qwen_snapshot_download.py 
from modelscope import snapshot_download

# Downloading model checkpoint to a local dir model_dir
# model_dir = snapshot_download('qwen/Qwen-7B')
# model_dir = snapshot_download('qwen/Qwen-7B-Chat')
# model_dir = snapshot_download('qwen/Qwen-14B')
model_dir = snapshot_download('qwen/Qwen-14B-Chat')

# 运行脚本下载
(qwen) root@intern-studio-50014188:~# python3 Qwen_snapshot_download.py 

# 下载后的模型路径:
(qwen) root@intern-studio-50014188:~/.cache/modelscope/hub/qwen/Qwen-14B-Chat# ls -alh
total 27G
drwxr-xr-x 2 root root 4.0K May  7 22:14 .
drwxr-xr-x 3 root root 4.0K May  7 22:04 ..
-rw-r--r-- 1 root root   41 May  7 22:04 .mdl
-rw------- 1 root root 2.5K May  7 22:14 .msc
-rw-r--r-- 1 root root   36 May  7 22:14 .mv
-rw------- 1 root root 6.8K May  7 22:04 LICENSE.md
-rw------- 1 root root 2.7K May  7 22:14 NOTICE.md
-rw------- 1 root root  33K May  7 22:14 README.md
-rw------- 1 root root 8.3K May  7 22:04 cache_autogptq_cuda_256.cpp
-rw------- 1 root root  51K May  7 22:04 cache_autogptq_cuda_kernel_256.cu
-rw------- 1 root root  910 May  7 22:04 config.json
-rw------- 1 root root   77 May  7 22:04 configuration.json
-rw------- 1 root root 2.3K May  7 22:04 configuration_qwen.py
-rw------- 1 root root 1.9K May  7 22:04 cpp_kernels.py
-rw------- 1 root root  249 May  7 22:04 generation_config.json
-rw------- 1 root root 2.0G May  7 22:05 model-00001-of-00015.safetensors
-rw------- 1 root root 1.9G May  7 22:06 model-00002-of-00015.safetensors
-rw------- 1 root root 1.8G May  7 22:06 model-00003-of-00015.safetensors
-rw------- 1 root root 1.8G May  7 22:07 model-00004-of-00015.safetensors
-rw------- 1 root root 1.8G May  7 22:08 model-00005-of-00015.safetensors
-rw------- 1 root root 1.8G May  7 22:08 model-00006-of-00015.safetensors
-rw------- 1 root root 1.8G May  7 22:09 model-00007-of-00015.safetensors
-rw------- 1 root root 1.8G May  7 22:09 model-00008-of-00015.safetensors
-rw------- 1 root root 1.8G May  7 22:10 model-00009-of-00015.safetensors
-rw------- 1 root root 1.8G May  7 22:10 model-00010-of-00015.safetensors
-rw------- 1 root root 1.8G May  7 22:11 model-00011-of-00015.safetensors
-rw------- 1 root root 1.8G May  7 22:12 model-00012-of-00015.safetensors
-rw------- 1 root root 1.8G May  7 22:12 model-00013-of-00015.safetensors
-rw------- 1 root root 1.8G May  7 22:13 model-00014-of-00015.safetensors
-rw------- 1 root root 1.5G May  7 22:14 model-00015-of-00015.safetensors
-rw------- 1 root root  24K May  7 22:14 model.safetensors.index.json
-rw------- 1 root root  55K May  7 22:14 modeling_qwen.py
-rw------- 1 root root 2.5M May  7 22:14 qwen.tiktoken
-rw------- 1 root root  15K May  7 22:14 qwen_generation_utils.py
-rw------- 1 root root 9.4K May  7 22:14 tokenization_qwen.py
-rw------- 1 root root  173 May  7 22:14 tokenizer_config.json

# 将下载的模型移Qwen仓库路径下
(qwen) root@intern-studio-50014188:~/Qwen# pwd
/root/Qwen

(qwen) root@intern-studio-50014188:~/Qwen# mv ~/.cache/modelscope/hub/qwen/Qwen-14B-Chat .

2. 运行demo程序

demo程序有多个可以进行测试,一种是官方readme文件中给出的实例程序,直接运行,prompt直接写在程序中,打印大模型的回复内容,这种方式没有交互方式;另外一种是仓库中带有的cli_demo和web_demo,分别基于命令行和web界面进行交换体验。

2.1 快速体验demo程序

使用Transformers或者ModelScope来使用我们的模型,测试官方提供的测试脚本。

2.1.1 huggingface transformers测试程序

使用Qwen-14B-Chat进行推理。在仓库路径下创建如下python文件,注意from_pretrained中的模型文件路径和名称(3个地方需要进行修改)。

(qwen) root@intern-studio-50014188:~/Qwen# cat hg_transformer_Qwen14BChat_demo1.py 
from transformers import AutoModelForCausalLM, AutoTokenizer
from transformers.generation import GenerationConfig

# 可选的模型包括: "Qwen/Qwen-7B-Chat", "Qwen/Qwen-14B-Chat"
tokenizer = AutoTokenizer.from_pretrained("./Qwen-14B-Chat", trust_remote_code=True)

# 打开bf16精度,A100、H100、RTX3060、RTX3070等显卡建议启用以节省显存
model = AutoModelForCausalLM.from_pretrained("./Qwen-14B-Chat", device_map="auto", trust_remote_code=True, bf16=True).eval()
# 打开fp16精度,V100、P100、T4等显卡建议启用以节省显存
# model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen-7B-Chat", device_map="auto", trust_remote_code=True, fp16=True).eval()
# 使用CPU进行推理,需要约32GB内存
# model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen-7B-Chat", device_map="cpu", trust_remote_code=True).eval()
# 默认使用自动模式,根据设备自动选择精度
# model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen-7B-Chat", device_map="auto", trust_remote_code=True).eval()

# 可指定不同的生成长度、top_p等相关超参
model.generation_config = GenerationConfig.from_pretrained("./Qwen-14B-Chat", trust_remote_code=True)

# 第一轮对话
response, history = model.chat(tokenizer, "你好"history=None)
print(response)
# 你好!很高兴为你提供帮助。

# 第二轮对话
response, history = model.chat(tokenizer, "给我讲一个年轻人奋斗创业最终取得成功的故事。"history=history)
print(response)
# 这是一个关于一个年轻人奋斗创业最终取得成功的故事。
# 故事的主人公叫李明,他来自一个普通的家庭,父母都是普通的工人。从小,李明就立下了一个目标:要成为一名成功的企业家。
# 为了实现这个目标,李明勤奋学习,考上了大学。在大学期间,他积极参加各种创业比赛,获得了不少奖项。他还利用课余时间去实习,积累了宝贵的经验。
# 毕业后,李明决定开始自己的创业之路。他开始寻找投资机会,但多次都被拒绝了。然而,他并没有放弃。他继续努力,不断改进自己的创业计划,并寻找新的投资机会。
# 最终,李明成功地获得了一笔投资,开始了自己的创业之路。他成立了一家科技公司,专注于开发新型软件。在他的领导下,公司迅速发展起来,成为了一家成功的科技企业。
# 李明的成功并不是偶然的。他勤奋、坚韧、勇于冒险,不断学习和改进自己。他的成功也证明了,只要努力奋斗,任何人都有可能取得成功。

# 第三轮对话
response, history = model.chat(tokenizer, "给这个故事起一个标题"history=history)
print(response)
# 《奋斗创业:一个年轻人的成功之路》

通过python3 hg_transformer_Qwen14BChat_demo1.py执行,实际体验推理过程较慢,24GB的A100显存资源基本满载。由于没有交互,故事部分等待了很长时间才打印输出内容。测试安装FlashAttension之后提速效果不明显。

(qwen) root@intern-studio-50014188:~/Qwen# python3 hg_transformer_Qwen14BChat_demo1.py 
Warning: please make sure that you are using the latest codes and checkpoints, especially if you used Qwen-7B before 09.25.2023.请使用最新模型和代码,尤其如果你在9月25日前已经开始使用Qwen-7B,千万注意不要使用错误代码和模型。
Try importing flash-attention for faster inference...
Warning: import flash_attn rms_norm fail, please install FlashAttention layer_norm to get higher efficiency https://github.com/Dao-AILab/flash-attention/tree/main/csrc/layer_norm
Loading checkpoint shards: 100%|██████████████████████████████████████████████████| 15/15 [00:30<00:00,  2.03s/it]
WARNING:root:Some parameters are on the meta device device because they were offloaded to the cpu.
你好!有什么我可以帮助你的吗?
当然,这是一个叫杰克的年轻人的故事。

杰克出生在一个普通的家庭,他的父母都是工人。他从小就对科技和创新有着浓厚的兴趣,并且一直梦想着能够创造出自己的产品来改变世界。

在大学期间,杰克就开始了自己的创业之路。他创立了一家初创公司,专注于开发新型的智能家居设备。但是,初期的发展并不顺利,他们的产品在市场上并没有得到很好的反响。

尽管面临困难,但杰克没有放弃。他深入研究市场需求,并调整了公司的战略方向。他决定将目光投向人工智能领域,打造一款具有自我学习能力的家庭机器人。

经过无数次的努力和失败,杰克和他的团队终于研发出了这款智能机器人。这款机器人的出现引起了市场的广泛关注,销售情况也十分理想。

几年后,杰克的公司已经发展成为一家全球知名的高科技企业,他的产品被广泛应用在世界各地的家庭中,改善了人们的生活方式。他也因此获得了多项科技创新大奖,成为了年轻一代的创业偶像。

这个故事告诉我们,只要有决心、勇气和创新精神,无论起点多么平凡,我们都可以通过自己的努力和智慧实现伟大的梦想。
《从零开始:一位青年的科技创业之旅》

资源占用:

alt
2.1.2 ModelScope测试程序

使用Qwen-7B-chat进行推理。在仓库路径下创建如下python文件,注意from_pretrained中的模型文件路径和名称(3个地方需要进行修改)。

(base) root@intern-studio-50014188:~/Qwen# cat ms_transformer_Qwen7BChat_demo2.py 
from modelscope import AutoModelForCausalLM, AutoTokenizer
from modelscope import GenerationConfig

# 可选的模型包括: "qwen/Qwen-7B-Chat", "qwen/Qwen-14B-Chat"
tokenizer = AutoTokenizer.from_pretrained("./Qwen-7B-Chat", trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained("./Qwen-7B-Chat", device_map="auto", trust_remote_code=True, fp16=True).eval()
model.generation_config = GenerationConfig.from_pretrained("./Qwen-7B-Chat", trust_remote_code=True) # 可指定不同的生成长度、top_p等相关超参

response, history = model.chat(tokenizer, "你好"history=None)
print(response)
response, history = model.chat(tokenizer, "浙江的省会在哪里?"history=history
print(response)
response, history = model.chat(tokenizer, "它有什么好玩的景点"history=history)
print(response)

运行demo程序,GPU最高占用约15G,推理过程较上面的快:

(qwen) root@intern-studio-50014188:~/Qwen# python3 ms_transformer_Qwen7BChat_demo2.py 
2024-05-08 11:30:44,479 - modelscope - INFO - PyTorch version 2.3.0 Found.
2024-05-08 11:30:44,479 - modelscope - INFO - Loading ast index from /root/.cache/modelscope/ast_indexer
2024-05-08 11:30:44,558 - modelscope - INFO - Updating the files for the changes of local files, first time updating will take longer time! Please wait till updating done!
2024-05-08 11:30:44,567 - modelscope - INFO - AST-Scanning the path "/usr/local/lib/python3.8/dist-packages/modelscope" with the following sub folders ['models''metrics''pipelines''preprocessors''trainers''msdatasets''exporters']
2024-05-08 11:30:57,465 - modelscope - INFO - Scanning done! A number of 976 components indexed or updated! Time consumed 12.89767575263977s
2024-05-08 11:30:57,496 - modelscope - INFO - Loading done! Current index file version is 1.14.0, with md5 e9dc05602b3b26234574a15f8c3fe080 and a total number of 976 components indexed
Try importing flash-attention for faster inference...
Warning: import flash_attn rms_norm fail, please install FlashAttention layer_norm to get higher efficiency https://github.com/Dao-AILab/flash-attention/tree/main/csrc/layer_norm
Loading checkpoint shards: 100%|███████████████████████████████████████████████████████████| 8/8 [00:43<00:00,  5.46s/it]
你好!很高兴为你提供帮助。有什么我可以帮你的吗?
浙江省会是杭州市。
杭州市有很多著名的旅游景点,例如西湖、灵隐寺、西溪湿地公园等。西湖是杭州最著名的景点之一,拥有美丽的湖泊、绿树环绕和历史文化遗迹;灵隐寺位于杭州市西湖区灵隐山下,是中国佛教禅宗四大名刹之一;西溪湿地公园是一个自然保护区,拥有丰富的野生动植物资源和独特的湿地景观。

资源占用情况如下:

alt

进行交叉测试,使用huggingface和modelscope的transformers分别测试demo1(讲故事),推理速度都较慢。

安装layer_norm后再次使用demo1程序进行测试,推理速度和资源占用优化提升不大。

(qwen) root@intern-studio-50014188:~/Qwen# cd flash-attention/
(qwen) root@intern-studio-50014188:~/Qwen/flash-attention# ls
AUTHORS  LICENSE  MANIFEST.in  Makefile  README.md  assets  benchmarks  csrc  examples  flash_attn  setup.py  tests  training  usage.md
(qwen) root@intern-studio-50014188:~/Qwen/flash-attention# pip install csrc/layer_norm
Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple
Processing ./csrc/layer_norm
Building wheels for collected packages: dropout-layer-norm
  Building wheel for dropout-layer-norm (setup.py) ... done
  Created wheel for dropout-layer-norm: filename=dropout_layer_norm-0.1-cp38-cp38-linux_x86_64.whl size=152352178 sha256=a9fcf2fe350ccaad2cd2c943dc5aa634d9b398fba473e09d01518dca1e0cb828
  Stored in directory: /tmp/pip-ephem-wheel-cache-trak08bs/wheels/7a/c3/d2/992b2e303949af1a2128a2308268a95ec308309657cd12e497
Successfully built dropout-layer-norm
Installing collected packages: dropout-layer-norm
Successfully installed dropout-layer-norm-0.1

2.2 交互体验demo

上述的demo程序没有交互流程,下面通过命令行和web界面两种方式测试大模型。除了可以进行交互外,另外就是运行demo程序后,模型文件会一直加载到GPU中,不用每次推理都进行重复加载,直到停止程序为止。

2.2.1 命令行方式
# 命令行运行模型,修改cli_demo.py,修改模型路径:
(qwen) root@intern-studio-50014188:~/Qwen# vim cli_demo.py 
...
DEFAULT_CKPT_PATH = './Qwen-14B-Chat'
...

# 运行demo程序:
(qwen) root@intern-studio-50014188:~/Qwen# python3 cli_demo.py
...

效果如下,相对于上面的程序,推理过程是渐进式的,虽然速度仍然较慢:

alt
2.2.2 web界面方式
# web界面运行模型,修改web_demo.py,修改模型路径:
DEFAULT_CKPT_PATH = './Qwen-14B-Chat'

# 安装依赖:
(qwen) root@intern-studio-50014188:~/Qwen# pip install gradio mdtex2html

运行web界面:
(qwen) root@intern-studio-50014188:~/Qwen# python3 web_demo.py 
Warning: please make sure that you are using the latest codes and checkpoints, especially if you used Qwen-7B before 09.25.2023.请使用最新模型和代码,尤其如果你在9月25日前已经开始使用Qwen-7B,千万注意不要使用错误代码和模型。
The model is automatically converting to bf16 for faster inference. If you want to disable the automatic precision, please manually add bf16/fp16/fp32=True to "AutoModelForCausalLM.from_pretrained".
Try importing flash-attention for faster inference...
Warning: import flash_attn rms_norm fail, please install FlashAttention layer_norm to get higher efficiency https://github.com/Dao-AILab/flash-attention/tree/main/csrc/layer_norm
/usr/local/lib/python3.8/dist-packages/accelerate/utils/modeling.py:1365: UserWarning: Current model requires 2621568 bytes of buffer for offloaded layers, which seems does not fit any GPU's remaining memory. If you are experiencing a OOM later, please consider using offload_buffers=True.
  warnings.warn(
Loading checkpoint shards: 100%|█████████████████████████████████████████████████████| 15/15 [00:06<00:00,  2.25it/s]
Running on local URL:  http://127.0.0.1:8000

由于webserver运行在远端开发机上,需要在本地电脑配置ssh端口转发,本地电脑如果是windows,需要是最新的win10或者win11.自带ssh命令。命令如下:

ssh -CNg -L 8000:127.0.0.1:8000 -o StrictHostKeyChecking=no -p 46672 root@ssh.intern-ai.org.cn

将远端机器的8000端口转发到本地的8000端口。ssh连接远端机器的端口(46672)和域名(ssh.intern-ai.org.cn)可以都提供测试机的平台查看。

然后终端打开http://127.0.0.1:8000 即可打开模型对话界面。

测试相同问答,效果如下:

alt

注意:

在运行demo程序之前,通过ps命令查看确保之前运行的demo程序已经关闭,否则会导致GPU资源不足。

本文由 mdnice 多平台发布

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

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

相关文章

有什么快速ai智能生成思维导图的软件?6个软件教你轻松制作思维导图

有什么快速ai智能生成思维导图的软件&#xff1f;6个软件教你轻松制作思维导图 思维导图是一种图形化的工具&#xff0c;用于组织和表示思维过程中的概念和想法之间的关系。在现代的工作和学习环境中&#xff0c;快速制作思维导图对于理清思路、规划项目、记录笔记等方面都非常…

如何设置cPanel的自动备份

近期我们购买了Hostease美国VPS云主机产品&#xff0c;由于需要设置服务器的自动备份&#xff0c;我们向Hostease技术团队进行了咨询&#xff0c;他们提到VPS云主机的cPanel面板包含自动备份功能&#xff0c;下面我们就介绍如何进行自动备份的设置。 首先你需要登录到WHM面板&…

从封号之痛出发:探索自养号测评,助力eBay卖家破局重生

在跨境电商的浪潮中&#xff0c;eBay作为知名的电商平台&#xff0c;吸引了众多卖家前来拓展业务。然而&#xff0c;近年来不少卖家反映&#xff0c;因环境问题导致eBay账号被封号&#xff0c;成为他们业务发展的痛点。为此&#xff0c;本文将探讨如何通过自养号测评&#xff0…

不止于量子!“光与热”两大架构重塑计算前沿

在探索超越传统计算机性能的途径中&#xff0c;量子计算通常被视为一种前沿技术。然而&#xff0c;它并非解决所有计算挑战的唯一方案。事实上&#xff0c;最近有两家公司推出了基于独特物理原理的计算设备&#xff0c;这些设备专门针对特定应用设计&#xff0c;据称在处理特定…

uniapp + vue3 使用axios

场景 uniapp自带的uni.request不太好用&#xff0c;也有可能是自己用axios用的太熟悉了&#xff0c;所以还是用axios趁手点&#xff0c;所以尝试在uniapp中使用axios。 操作 因为uniapp项目没有package.json&#xff0c;所以先在项目根目录下执行 npm init, 执行完毕后直接…

如何vscode中刷力扣

推荐你阅读 互联网大厂万字专题总结 Redis总结 JUC总结 操作系统总结 JVM总结 Mysql总结 微服务总结 互联网大厂常考知识点 什么是系统调用 CPU底层锁指令有哪些 AQS与ReentrantLock原理 旁路策略缓存一致性 Java通配符看这一篇就够 Java自限定泛型 技术分享 如何vscode中刷力扣…

登录校验总览-jwt令牌

一、前置问题 为什么要登录校验&#xff1f;登录校验&#xff0c;就是判断访问资源的用户是否是合法用户&#xff0c;保障安全。如果不设置登录校验&#xff0c;就可以跳过登录&#xff0c;直接通过url访问资源。二、登录校验实现思路&#xff1a; 在服务器端对请求进行统一拦…

Sarcasm detection论文解析 |CAT-BiGRU

论文地址 论文地址&#xff1a;CAT-BiGRU: Convolution and Attention with Bi-Directional Gated Recurrent Unit for Self-Deprecating Sarcasm Detection | Cognitive Computation github:Ashraf-Kamal/Self-Deprecating-Sarcasm-Detection (github.com) 论文首页 笔记框架 …

NVIDIA: RULER新测量方法让大模型现形

1 引言 最近在人工智能系统工程和语言模型设计方面的进展已经实现了语言模型上下文长度的高效扩展。以前的工作通常采用合成任务,如密钥检索和大海捞针来评估长上下文语言模型(LMs)。然而,这些评估在不同工作中使用不一致,仅揭示了检索能力,无法衡量其他形式的长上下文理解。 …

如何提高日语听力?日语学习日语培训柯桥小语种学校

每次一说起练日语听力&#xff0c;总离不开一个词&#xff0c;那就是“磨耳朵”。 可是&#xff0c;“磨耳朵”真的有用吗&#xff1f; 在讨论这个问题之前&#xff0c;我们需要先知道&#xff1a;什么是“磨耳朵”&#xff1f; 所谓的“磨耳朵”&#xff0c;其实就是让我们的耳…

通配符证书价格350元

通配符SSL证书是一种特殊的域名SSL证书&#xff0c;这款SSL证书默认保护主域名以及主域名下的所有子域名&#xff0c;因此&#xff0c;子域名比较多的个人或者企事业单位开发者都倾向于选择通配符SSL证书来简化SSL证书管理过程&#xff0c;节省购买SSL证书的资金&#xff0c;降…

python词云图背景颜色修改

python词云图背景颜色修改 词云图介绍wordcloud介绍修改背景颜色 词云图介绍 词云图&#xff08;Word Cloud&#xff09;是一种文本数据的可视化表示形式&#xff0c;它通过字体大小、颜色、布局等视觉元素来展示文本中不同词汇的频率或重要性。词云图中&#xff0c;出现频率高…

纯血鸿蒙APP实战开发——Canvas实现模拟时钟案例

介绍 本示例介绍利用Canvas 和定时器实现模拟时钟场景&#xff0c;该案例多用于用户需要显示自定义模拟时钟的场景。 效果图预览 使用说明 无需任何操作&#xff0c;进入本案例页面后&#xff0c;所见即模拟时钟的展示。 实现思路 本例的的主要实现思路如下&#xff1a; …

C语言:__attribute__((packed))

一、简介 在使用结构体的时候&#xff0c;经常要根据结构体的长度来进行相关判断。但是按照C语言的规则&#xff0c;会对不同类型的数据类型进行自动对齐。有时候就会造成一些问题&#xff0c;如果不需要使用自动对齐的功能&#xff0c;就需要使用到本章的关键字。 二、自动对…

相机内存卡格式化怎么恢复?恢复数据的3个方法

相机内存卡格式化后&#xff0c;许多用户都曾面临过照片丢失的困境。这些照片可能具有极高的纪念价值&#xff0c;也可能包含着重要的信息。因此如何有效地恢复这些照片变得至关重要。本文将详细介绍三种实用的恢复方法&#xff0c;帮助您找回那些珍贵的影像。 下面分享几个实…

JavaScript 动态网页实例 —— 数值处理对象

前言 Math对象用于进行数学运算。其属性是数学中一些常见的常数值,在程序中可以直接使用。Math对象的方法很多,主要完成一些常见的数学运算,如三角函数计算、乘方、开方、求对数等。在 Math 对象的方法中,除了random()之外的所有方法都需要一个或几个参数,并且其用法基本…

24V转3.8V用什么芯片方案-AH8310

在将24V降压至3.8V的电源转换中&#xff0c;AH8310是一个理想的选择。这款芯片是一款降压转换器&#xff0c;输入电压范围为4.5V至36V&#xff0c;输出电压可调&#xff0c;峰值电流可达1.5A。AH8310采用SOT23-6封装&#xff0c;内置MOS&#xff0c;适用于各种应用场合&#xf…

PostgreSQL数据库创建只读用户的权限安全隐患

PostgreSQL数据库模拟备库创建只读用户存在的权限安全隐患 default_transaction_read_only权限授权版本变更说明 看腻了就来听听视频演示吧&#xff1a;https://www.bilibili.com/video/BV1ZJ4m1578H/ default_transaction_read_only 创建只读用户&#xff0c;参照备库只读模…

力扣数据库题库学习(5.7日)--1789. 员工的直属部门

1789. 员工的直属部门 问题链接&#x1f60a; 思路分析 一个员工可以属于多个部门。当一个员工加入超过一个部门的时候&#xff0c;他需要决定哪个部门是他的直属部门。请注意&#xff0c;当员工只加入一个部门的时候&#xff0c;那这个部门将默认为他的直属部门&#xff0c…

Compose 生命周期和副作用

文章目录 Compose 生命周期和副作用生命周期副作用APIDisposableEffectSIdeEffectLaunchedEffectrememberCoroutineScoperememberUpdatedStatesnapshotFlowproduceStatederivedStateOf Compose 生命周期和副作用 生命周期 OnActive&#xff1a;添加到视图树。即Composable被首…