如何在本地部署大模型并实现接口访问( Llama3、Qwen、DeepSeek等)
如何在本地部署大模型并实现接口访问( Llama3、Qwen、DeepSeek等)
- 如何在本地部署大模型并实现接口访问( Llama3、Qwen、DeepSeek等)
- 模型地址
- 模型下载
- 模型部署
- 指定显卡运行
- app.py
- 运行环境
- requirements
- 调用接口
- 代码调用
- 结语
如何在本地部署大模型并实现接口访问( Llama3、Qwen、DeepSeek等)
本文详细介绍了如何在本地服务器上部署大模型(如DeepSeek、Llama3、Qwen等),并通过接口实现外部调用。首先,从HuggingFace或魔搭网站下载模型,使用git lfs和screen确保大文件完整下载;接着,使用FastAPI封装模型推理过程,支持多GPU运行并通过CUDA_VISIBLE_DEVICES指定显卡,提供完整的app.py代码实现模型加载和接口响应;然后,通过conda创建Python 3.10环境并安装依赖,使用nohup后台运行服务;最后,展示如何通过Postman或代码调用接口,发送请求并获取模型生成的文本。本文提供了从模型下载、部署到接口调用的完整流程,适合在本地服务器上运行大模型并实现高效的推理服务。
模型地址
在HuggingFace中搜索对应模型,并选择git clone
比如
git clone https://huggingface.co/deepseek-ai/DeepSeek-V2-Chat
huggingface网站可能会访问超时,因此可以选择国内的魔搭网站,同样登录网站后,搜索对应模型并下载
git clone https://www.modelscope.cn/deepseek-ai/DeepSeek-V2-Lite-Chat.git
模型下载
由于模型比较大,所以需要用git lfs install
如果是下载70B或者更大的模型,可能git clone还是会遗漏一些文件,所以推荐使用Screen
在后台下载
创建conda环境后,使用conda install -c conda-forge screen
安装screen
为 screen 会话指定一个名称,可以使用 -S 参数:
screen -S mysession
暂时离开当前 screen 会话(但保持会话在后台运行)
Ctrl + A,然后按 D
重新连接到之前创建的 screen 会话,可以使用以下命令:
screen -r mysession
screen相当于启动了一个新的终端,与其他的终端互不影响,其中的工作都在后台运行
在screen中运行 git clone命令即可
如果出现文件遗漏,可以使用sh脚本指定文件下载,比如指定三个文件进行下载的download_files.sh
:
#!/bin/bash# 目标 URL 和文件名的前缀
BASE_URL="https://www.modelscope.cn/models/LLM-Research/Llama-3.3-70B-Instruct/resolve/master"
FILES=("model-00028-of-00030.safetensors""model-00029-of-00030.safetensors""model-00030-of-00030.safetensors"
)# 循环下载文件
for FILE in "${FILES[@]}"; doecho "开始下载 $FILE ..."curl -O "$BASE_URL/$FILE" # 使用 curl 下载文件if [ $? -eq 0 ]; thenecho "$FILE 下载成功"elseecho "$FILE 下载失败"fi
doneecho "所有文件下载完毕!"
在终端中运行脚本:
./download_files.sh
- ./ 表示当前目录,确保系统知道从当前目录查找脚本。
模型部署
模型下载后,本地就有了完整的模型仓库
接下来就要进行模型的部署,采用fastapi进行模型部署,使用下列代码作为app.py
指定显卡运行
如果你有多张显卡,并且想指定使用第4和第5张GPU运行,可以在环境变量中设置仅4,5 GPU
可见,此时第4变为0 第5变为1
if "DeepSeek" in MODEL_PATH_OR_NAME:os.environ['CUDA_VISIBLE_DEVICES'] = '4'
else:os.environ['CUDA_VISIBLE_DEVICES'] = '4,5'
然后加载模型时设置device_map="auto"
model = AutoModelForCausalLM.from_pretrained(MODEL_PATH_OR_NAME, torch_dtype=torch.float16, device_map="auto")
app.py
import os
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from transformers import AutoTokenizer, AutoModelForCausalLM, GenerationConfig
import torch
import torch.nn as nn
# Initialize FastAPI app
app = FastAPI()MODEL_PATH_OR_NAME = "/yourpath/DeepSeek-V2-Lite-Chat"# Set CUDA devices for visibility
if "DeepSeek" in MODEL_PATH_OR_NAME:os.environ['CUDA_VISIBLE_DEVICES'] = '4'
else:os.environ['CUDA_VISIBLE_DEVICES'] = '4,5'
device = torch.device('cuda:0') # Using GPU 2# Declare global variables for model and tokenizer
model = None
tokenizer = None# Use startup and shutdown events for model loading and unloading
@app.on_event("startup")
async def startup():global model, tokenizerprint("Loading model and tokenizer...")if "DeepSeek" in MODEL_PATH_OR_NAME:tokenizer = AutoTokenizer.from_pretrained(MODEL_PATH_OR_NAME, trust_remote_code=True)model = AutoModelForCausalLM.from_pretrained(MODEL_PATH_OR_NAME, trust_remote_code=True, torch_dtype=torch.bfloat16, device_map="auto").cuda()model.generation_config = GenerationConfig.from_pretrained(MODEL_PATH_OR_NAME)model.generation_config.pad_token_id = model.generation_config.eos_token_idelse:tokenizer = AutoTokenizer.from_pretrained(MODEL_PATH_OR_NAME, use_fast=False)tokenizer.pad_token_id = tokenizer.eos_token_id # 假设eos_token_id就是合适的填充词元标识model = AutoModelForCausalLM.from_pretrained(MODEL_PATH_OR_NAME, torch_dtype=torch.float16, device_map="auto")print("Model loaded successfully!")@app.on_event("shutdown")
async def shutdown():global model, tokenizerprint("Shutting down the model...")del modeldel tokenizer# Define request model using Pydantic
class ChatCompletionRequest(BaseModel):model: strmessages: listtemperature: float = 0max_tokens: int = 256top_p: float = 1stop: list = None # Ensure stop is a list or None# Define response model
class ChatCompletionResponse(BaseModel):choices: list# Define the /generate route
@app.post("/generate", response_model=ChatCompletionResponse)
async def generate_response(request: ChatCompletionRequest):# Get user prompt (last message)prompt = request.messages[-1]["content"]print('INPUT :'+prompt+'\n')if "DeepSeek" in MODEL_PATH_OR_NAME:try:messages = [{"role": "user", "content": prompt}]input_tensor = tokenizer.apply_chat_template(messages, add_generation_prompt=True, return_tensors="pt")outputs = model.generate(input_tensor.to(device), max_new_tokens=100)result = tokenizer.decode(outputs[0][input_tensor.shape[1]:], skip_special_tokens=True)print('OUTPUT :'+result)return ChatCompletionResponse(choices=[{"message": {"role": "assistant", "content": result},"finish_reason": "stop"}])except Exception as e:raise HTTPException(status_code=500, detail=str(e))else:try:# Tokenize the input text (with padding and truncation to ensure consistency)input_ids = tokenizer.encode(prompt, return_tensors="pt").to(device)# Optionally, get eos_token_id for stopping criteriaeos_token_id = tokenizer.eos_token_id if tokenizer.eos_token_id else Noneattention_mask = torch.ones(input_ids.shape,dtype=torch.long,device=device)# Generate the response using the modeloutput = model.generate(input_ids,num_beams=1, # Use greedy decodingnum_return_sequences=1,early_stopping=True,do_sample=False,max_length=(getattr(request, 'max_tokens', 50) + len(input_ids[0])), # 默认 max_tokens=50top_p=getattr(request, 'top_p', 0.9), # 默认 top_p=0.9temperature=getattr(request, 'temperature', 0.9), # 默认 temperature=1.0repetition_penalty=getattr(request, 'repetition_penalty', 1.2), # 默认 repetition_penalty=1.2eos_token_id=eos_token_id, # Use eos_token_id for stoppingattention_mask=attention_mask,pad_token_id=eos_token_id)# Decode the generated text (skip special tokens)generated_text = tokenizer.decode(output[0], skip_special_tokens=True)# Strip the prompt (remove the input part from the output)output_tokens = output[0][len(input_ids[0]):] # Remove input tokens from output tokensgenerated_text = tokenizer.decode(output_tokens, skip_special_tokens=True)print('OUTPUT:'+generated_text)# Return the generated text in the expected formatreturn ChatCompletionResponse(choices=[{"message": {"role": "assistant", "content": generated_text.strip()},"finish_reason": "stop"}])except Exception as e:raise HTTPException(status_code=500, detail=str(e))# Health check route
@app.get("/")
async def health_check():return {"status": "ok", "message": "Text Generation API is running!"}if __name__ == "__main__":import uvicornuvicorn.run("app:app", host="0.0.0.0", port=8890, reload=True) # reload=True 用于开发时的热重载
运行环境
运行app.py前需要安装环境依赖
首先
conda 创建环境:
conda create -n llmapi python=3.10 -y
conda activate llmapi
安装以下依赖,保存为requirements,txt
requirements
accelerate==1.1.1
annotated-types==0.7.0
anyio==4.6.2.post1
certifi==2024.8.30
charset-normalizer==3.4.0
click==8.1.7
exceptiongroup==1.2.2
fastapi==0.115.5
filelock==3.16.1
fsspec==2024.10.0
gputil==1.4.0
h11==0.14.0
huggingface-hub==0.26.3
idna==3.10
jinja2==3.1.4
markupsafe==3.0.2
mpmath==1.3.0
# networkx==3.2.1
numpy==2.0.2
nvidia-cublas-cu12==12.4.5.8
nvidia-cuda-cupti-cu12==12.4.127
nvidia-cuda-nvrtc-cu12==12.4.127
nvidia-cuda-runtime-cu12==12.4.127
nvidia-cudnn-cu12==9.1.0.70
nvidia-cufft-cu12==11.2.1.3
nvidia-curand-cu12==10.3.5.147
nvidia-cusolver-cu12==11.6.1.9
nvidia-cusparse-cu12==12.3.1.170
nvidia-nccl-cu12==2.21.5
nvidia-nvjitlink-cu12==12.4.127
nvidia-nvtx-cu12==12.4.127
packaging==24.2
pillow==11.0.0
protobuf==5.29.0
psutil==6.1.0
pydantic==2.10.2
pydantic-core==2.27.1
pyyaml==6.0.2
regex==2024.11.6
requests==2.32.3
safetensors==0.4.5
sentencepiece==0.2.0
sniffio==1.3.1
starlette==0.41.3
sympy==1.13.1
tokenizers==0.20.3
torch==2.5.1
torchaudio==2.5.1
torchvision==0.20.1
tqdm==4.67.1
transformers==4.46.3
triton==3.1.0
typing-extensions==4.12.2
urllib3==2.2.3
uvicorn==0.32.1
运行下列命令安装:
pip install -r requirements,txt
然后运行下列命令启动app.py ,这个命令会在后台启动app.py,并且输出日志在app.log 文件内
nohup python app.py > app.log 2>&1 &
调用接口
查看日志模型是否成功启动:
然后使用Post请求对应接口
{"model": "deep seek", "messages": [{"role": "user", "content": "AI是什么意思?"}],"temperature": 0.9,"max_tokens": 100,"repetition_penalty": 1.2, "top_p": 0.9,"stop": ["\n"] }
使用PostMan测试结果:
代码调用
import requestsimport json# Define the FastAPI URLurl = "http://YourIPAddress:YourPort/generate"prompt = '你是什么模型?'# Define the request payload (data)data = {"model": "ModelName", # Example model name (change according to your setup)"messages": [{'role': 'user', 'content': prompt}],"temperature": 0.7,"max_tokens": 100,"top_p": 1.0,"frequency_penalty": 0.0,"presence_penalty": 0.0,"stop": [] # Ensure 'stop' is an empty list}response = ''# Send a POST request to the FastAPI endpointresponse_data = requests.post(url, json=data)# Check the responseif response_data.status_code == 200:# print("Response received successfully:")# print(json.dumps(response.json(), indent=4))result = response_data.json()# 从响应中获取生成的文本response = str(result['choices'][0]['message']['content']).strip()else:print(f"Request failed with status code {response_data.status_code}")print(response_data.text)return response
结语
至此,大模型的本地部署和接口调用就介绍完了
相关文章:
如何在本地部署大模型并实现接口访问( Llama3、Qwen、DeepSeek等)
如何在本地部署大模型并实现接口访问( Llama3、Qwen、DeepSeek等) 如何在本地部署大模型并实现接口访问( Llama3、Qwen、DeepSeek等)模型地址模型下载模型部署指定显卡运行app.py 运行环境requirements 调用接口代码调用 结语 如何…...
使用 Linux tracepoint、perf 和 eBPF 跟踪数据包
大家读完觉得有帮助记得关注和点赞!!! 目录 1 破局 1.1 逃离迷宫:上帝视角 1.2 网络跟踪:渴求利器 1.3 巨人肩膀:perf/eBPF 2 Perf 2.1 安装 perf 2.2 测试环境 2.3 初体验:跟踪 ping …...
给DevOps加点料:融入安全性的DevSecOps
从前,安全防护只是特定团队的责任,在开发的最后阶段才会介入。当开发周期长达数月、甚至数年时,这样做没什么问题;但是现在,这种做法现在已经行不通了。 采用 DevOps 可以有效推进快速频繁的开发周期(有时…...
MySQL视图笔记
视图的理解 ①视图是一种 虚拟表 ,本身是 不具有数据 的,占用很少的内存空间,它是 SQL 中的一个重要概念。 ②视图建立在已有表的基础上, 视图赖以建立的这些表称为基表。 ③对视图中的数据进行增加删除和修改,对应的数据表&a…...
【Ubuntu与Linux操作系统:十、C/C++编程】
第10章 C/C编程 10.1 Linux编程基础 Linux编程基础涵盖了C/C语言在Linux环境中的特点和使用方法。Linux以其高性能和开源特性成为系统编程的重要平台。 1. C语言与Linux的关系 Linux内核主要是用C语言编写的,因此学习C语言是理解Linux底层机制的必要前提。C语言的…...
豆包MarsCode:可以在线用的智能AI编程助手
大家好,今天我想和大家分享一个我最近发现的宝藏工具——豆包MarsCode。 作为一个程序员,我一直在寻找能够提高工作效率、快捷、 优化代码质量的在线编程工具。豆包MarsCode IDE,这个由字节跳动推出的智能编程助手,让我眼前一亮&…...
RabbitMQ基础(简单易懂)
RabbitMQ高级篇请看: RabbitMQ高级篇-CSDN博客 目录 什么是RabbitMQ? MQ 的核心概念 1. RabbitMQ 的核心组件 2. Exchange 的类型 3. 数据流向说明 如何安装RabbitQueue? WorkQueue(工作队列): Fa…...
UE5 使用内置组件进行网格切割
UE引擎非常强大,直接内置了网格切割功能并封装为蓝图节点,这项功能在UE4中就存在,并且无需使用Chaos等模块。那么就来学习下如何使用内置组件实现网格切割。 1.配置测试用StaticMesh 对于被切割的模型,需要配置一些参数。以UE5…...
【面试题】技术场景 6、Java 生产环境 bug 排查
生产环境 bug 排查思路 分析日志:首先通过分析日志查看是否存在错误信息,利用之前讲过的 elk 及查看日志的命令缩小查找错误范围,方便定位问题。远程 debug 适用环境:一般公司正式生产环境不允许远程 debug,多在测试环…...
macOS 安装tomcat9
macOS 安装tomcat9 URL:https://tomcat.apache.org/download-90.cgi 解压之后放到指定目录 /Users/lanren/install/tomcat-9 自己取个名字就行 给权限: ① 先进行权限修改:终端输入sudo chmod 755 /Users/lanren/install/tomcat-9/bin/…...
多线程之旅:属性及其基本操作
上次分享到了,多线程中是是如何创建的,那么接下来,小编继续分享下多线程的相关知识。 多线程中的一些基本属性。 基本属性 属性获取方法IDgetId()名称getName()状态getState()优先级getPriority()是否后台线程isDemo()是否存活isAlive()是…...
隧道网络:为数据传输开辟安全通道
什么是隧道网络? 想象一下,你正在一个陌生的城市旅行,并且想要访问家里的电脑。但是,直接连接是不可能的,因为家庭网络通常受到防火墙或路由器的保护,不允许外部直接访问。这时候,隧道网络&…...
Python爬虫-汽车之家各车系周销量榜数据
前言 本文是该专栏的第43篇,后面会持续分享python爬虫干货知识,记得关注。 在本专栏之前,笔者在文章《Python爬虫-汽车之家各车系月销量榜数据》中,有详细介绍,如何爬取“各车系车型的月销量榜单数据”的方法以及完整代码教学教程。 而本文,笔者同样以汽车之家平台为例,…...
【机器学习】时序数据与序列建模:理论与实践的全面指南
云边有个稻草人-CSDN博客 目录 云边有个稻草人-CSDN博客 引言 一、时序数据的特点与挑战 1.1 时序数据的特点 1.2 序列建模的挑战 二、传统方法概览 2.1 ARIMA 模型 2.2 Prophet 三、深度学习方法 3.1 RNN 和 LSTM 3.2 Attention 和 Transformer 3.3 自监督学习 四、…...
java.net.SocketException: Connection reset 异常原因分析和解决方法
导致此异常的原因,总结下来有三种情况: 一、服务器端偶尔出现了异常,导致连接关闭 解决方法: 采用出错重试机制 二、 服务器端和客户端使用的连接方式不一致 解决方法: 服务器端和客户端使用相同的连接方式ÿ…...
【华为OD-E卷 - 恢复数字序列 100分(python、java、c++、js、c)】
【华为OD-E卷 - 恢复数字序列 100分(python、java、c、js、c)】 题目 对于一个连续正整数组成的序列,可以将其拼接成一个字符串,再将字符串里的部分字符打乱顺序。如序列8 9 10 11 12,拼接成的字符串为89101112&…...
05、Redis持久化
Redis是在内存中操作的,我们服器关闭重启机器后,正常是之前在redis中操作的数据都不存在了,但是实际上我们开机后重新启动redis服务,一样可以看到之前操作的数据。这是为什么呢? 我们在redis的安装目录下可以看到有一…...
Python爬虫基础——selenium模块进阶(模拟鼠标操作)
主要内容包括:模拟鼠标操作。常用的鼠标操作有单击、双击、右击、长按、拖动、移动等,模拟这些操作需要用到selenium模块中的ActionChains类。该类的基本使用方法是将实例化好的WebDriver对象作参数传到该类中,实例化成一个ActionChains对象&…...
C++ macro: The # operator
C macro: The # operator 1. The # operator2. Stringizing (字符串化)References 1. The # operator The # operator converts a parameter of a function-like macro into a character string literal. #define STR(x) #xAll subsequent invocations of the macro STR woul…...
一学就废|Python基础碎片,文件读写
文件处理是指通过编程接口对文件执行诸如创建、打开、读取、写入和关闭等操作的过程。它涉及管理程序与存储设备上的文件系统之间的数据流,确保数据得到安全高效的处理。 Python 中的文件模式 打开文件时,我们必须指定我们想要的模式,该模式…...
使用MATLAB正则表达式从文本文件中提取数据
使用MATLAB正则表达式从文本文件中提取数据 使用Python正则表达式从文本文件中提取数据的代码请看这篇文章使用正则表达式读取文本数据【Python】-CSDN博客 文本数据格式 需要提取 V 后面的数据, 并绘制出曲线. index 1V 0.000000W 0.000000E_theta 0.000000UINV 0.0…...
Java基于SSM框架的在线视频教育系统小程序【附源码、文档】
博主介绍:✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇dz…...
Git文件夹提交错了,怎么撤销?
最近提交了一些不应该提交的文件夹到git中,现在需要移除它们,现在简单记录一下操作日志: 情况一 文件夹已经被添加到 Git,但未提交 如果文件夹已经被 git add 添加到暂存区中,但尚未提交,你可以使用以下命令将其从暂存区中移除: git rm -r …...
Unity TextMesh Pro入门
概述 TextMesh Pro是Unity提供的一组工具,用于创建2D和3D文本。与Unity的UI文本和Text Mesh系统相比,TextMesh Pro提供了更好的文本格式控制和布局管理功能。 本文介绍了TMP_Text组件和Tmp字体资产(如何创建字体资产和如何解决缺字问题),还有一些高级功…...
大疆C++开发面试题及参考答案
虚函数的作用是什么?虚函数机制是如何实现的?虚表指针在内存中的存放位置在哪里? 虚函数主要用于实现多态性。多态是面向对象编程中的一个重要概念,它允许通过基类指针或引用调用派生类中重写的函数。这样可以在运行时根据对象的实…...
极品飞车6里的赛道简介
极品飞车里有很多赛道,赛道分为前向赛道Forward、后向赛道Backward。前向赛道Forward是从A点到B点;后向赛道Backward是前向赛道的逆过程,即从B点到A点。这里介绍极品飞车6的赛道长度、中英文名称翻译、难度等级。 序号赛道英文名赛道中文名总长(km)急弯难度等级1Alpine Trai…...
Swagger学习⑰——@Link注解
介绍 Link 是 Swagger/OpenAPI 3.0 注解库中的一个注解,用于在 OpenAPI 文档中定义链接(Link)。链接是一种在 API 响应中提供相关操作或资源引用的机制,通常用于描述操作之间的关系或提供额外的操作提示。 Link 注解的作用 Link…...
Cline(原Claude Dev)开源的IDE AI插件,如何搭配OpenRouter实现cursor功能,Cline怎么使用
Cline(原Claude Dev)是一个开源的IDE AI插件,可以使用你的命令行界面和编辑器的人工智能助手。 你可以直接在VS Code编辑器进行安装。如果你使用过Cursor AI IDE的话,可以尝试最新发布的Cline3.1版本。 在OpenRouter上࿰…...
WEB前端-3.1
目录 CSS部分 什么是CSS CSS的书写方式 网页引入CSS的方式 css的颜色、大小、边线 文本和字体样式 CSS选择器 属性选择器 伪类选择器 伪元素选择器 文本样式 display属性 背景样式 精灵图、雪碧图 元素定位 绝对定位 相对定位 浮动定位 浮动 CSS部分 什么是…...
灌区闸门自动化控制系统-精准渠道量测水-灌区现代化建设
项目背景 本项目聚焦于黑龙江某一灌区的现代化改造工程,该灌区覆盖广阔,灌溉面积高达7.5万亩,地域上跨越6个乡镇及涵盖17个村庄。项目核心在于通过全面的信息化建设,强力推动节水灌溉措施的实施,旨在显著提升农业用水的…...
QT中引入OpenCV库总结(qmake方式和cmake方式)
文章目录 前言opencv环境配置一、opencv库获取的两种方式二、qmake和cmake配置2.1、 qmake2.2、cmake2.2.1、引入opencv示例 三、qt与opencv对应关系四、问题 前言 我的软件环境,写在前面 Windows10QT5.12.12VS2017OpenCV4.5.4 opencv环境配置 一、opencv库获取…...
【DAPM杂谈之三】DAPM的初始化流程
本文主要分析DAPM的设计与实现 内核的版本是:linux-5.15.164,下载链接:Linux内核下载 主要讲解有关于DAPM相关的知识,会给出一些例程并分析内核如何去实现的 /**************************************************************…...
消息队列架构、选型、专有名词解释
私人博客传送门 消息队列专有名词解释 | 魔筝炼药师 MQ选型 | 魔筝炼药师 MQ架构 | 魔筝炼药师 MQ顺序消息 | 魔筝炼药师...
Scala语言的计算机基础
Scala语言的计算机基础 Scala是一种现代的编程语言,兼具面向对象和函数式编程的特性,广泛应用于大数据处理、后端开发和分布式系统等领域。本文将围绕Scala语言的基础知识,包括其语法特点、数据结构、函数式编程思想、与Java的关系以及在实际…...
爬虫基础之爬取歌曲宝歌曲批量下载
声明:本案列仅供学习交流使用 任何用于非法用途均与本作者无关 需求分析: 网站:邓紫棋-mp3在线免费下载-歌曲宝-找歌就用歌曲宝-MP3音乐高品质在线免费下载 (gequbao.com) 爬取 歌曲名 歌曲 实现歌手名称下载所有歌曲 本案列所使用的模块 requests (发送…...
书说 MySQL 的悲观锁和乐观锁
什么是乐观锁?什么是悲观锁? 悲观锁: 悲观锁是一种基于悲观态度的控制机制(最坏的程度想,每次并发一定会造成阻塞),用于防止数据冲突。它采取预防性措施,在修改数据之前将其锁定&a…...
Linux WEB漏洞
定义:Linux Web 漏洞是指在基于 Linux 操作系统的 Web 应用程序、Web 服务器软件或者相关的网络服务配置中存在的安全弱点。这些漏洞可能导致攻击者未经授权访问敏感信息、篡改网页内容、执行恶意代码,甚至完全控制服务器。 常见类型及原理 SQL 注入漏…...
AIDD - 人工智能药物设计 -深度学习赋能脂质纳米颗粒设计,实现高效肺部基因递送
Nat. Biotechnol. | 深度学习赋能脂质纳米颗粒设计,实现高效肺部基因递送 今天为大家介绍的是来自美国麻省理工和爱荷华大学卡弗医学院团队的一篇论文。可离子化脂质(ionizable lipids)是脂质纳米颗粒(lipid nanoparticles&#…...
Selenium 进行网页自动化操作的一个示例,绕过一些网站的自动化检测。python编程
初级教程 selenium 教程和视频教程s原理与安装 - 白月黑羽 https://www.byhy.net/auto/selenium/01/#chrome%201 Selenium 自动化环境安装_哔哩哔哩_bilibili Selenium 自动化环境安装是Python Selenium Web自动化 2024版 - 自动化测试 爬虫的第2集视频,该合集共…...
力扣 岛屿数量
从某个点找,不断找相邻位置。 题目 岛屿中被“0”隔开后 ,是每一小块状的“1”,本题在问有多少块。可以用dfs进行搜索,遍历每一个点,把每一个点的上下左右做搜索检测,当检测到就标记为“0”表示已访问过&a…...
【前端动效】HTML + CSS 实现打字机效果
目录 1. 效果展示 2. 思路分析 2.1 难点 2.2 实现思路 3. 代码实现 3.1 html部分 3.2 css部分 3.3 完整代码 4. 总结 1. 效果展示 如图所示,这次带来的是一个有趣的“擦除”效果,也可以叫做打字机效果,其中一段文本从左到右逐渐从…...
期刊(中英),期刊分区,期刊所在数据库(中英),出版商区别和联系
目录 对期刊、分区、数据库、出版商整体了解期刊(中英)期刊分区期刊所在数据库总结 出版商 对期刊、分区、数据库、出版商整体了解 下图是我对这四部分的一个理解,其中期刊根据论文使用语言分为中英两种,期刊分区是用来评判论文质…...
LLM中temperature参数设置为0
LLM中 temperature参数设置为0 当模型的temperature参数设置为0时,通常有以下含义: 解码策略角度 意味着采用贪婪解码(greedy decoding)策略。在每一步生成文本时,模型会选择概率最高的词元,从而使输出具…...
Javase 基础复习 函数式接口 lambda表达式 方法应用
目录 案例1 案例2 1. 函数式接口 (Functional Interface) 特点: 示例: Java 8 引入了几个常用的函数式接口: 2. Lambda 表达式 语法解析: 示例: 3. 方法引用 (Method References) 示例: 4. 方法…...
【39. 组合总和 中等】
题目: 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。 candidates 中的 同一个 数字可以 无限…...
UE小白学习日记
Level UE中的Level(关卡)和Unity中的Scene(场景)在概念和用途上非常相似,都是用来组织和管理3D环境的基本单位。让我为您详细对比一下: 相似之处: 它们都是游戏世界的容器,可以包含游戏对象、光照、地形等元素都支持场景/关卡的切换和加载都可以用来划分游戏内容,比如不同关…...
补充之前的一篇 MySQL 的索引为什么能加快查询速度
在之前的一篇文章中写了 MySQL 的索引为什么能加快查询速度,结合这两篇文章,相信你会对 MySQL 的索引有更深一步的了解 首先我们要理解一件事,无论什么数据库,它的数据一定都是存储在硬盘中的,而硬盘和内存之间的读…...
GoLand下载安装教程
一、goland环境配置 1.下载地址 https://golang.google.cn/dl/ 2.下载安装 3.添加环境变量 4.测试环境变量 输出Hello,World! 说明环境配置成功 二、goland安装 1.下载安装 https://www.jetbrains.com/go/download/download-thanks.html 2.激活使用 SFXUSA86FM-eyJsaWNlbnNl…...
GAN的应用
5、GAN的应用 GANs是一个强大的生成模型,它可以使用随机向量生成逼真的样本。我们既不需要知道明确的真实数据分布,也不需要任何数学假设。这些优点使得GANs被广泛应用于图像处理、计算机视觉、序列数据等领域。上图是基于GANs的实际应用场景对不同G…...
[石榴翻译] 维吾尔语音识别 + TTS语音合成
API网址 丝路AI平台 获取 Access token 接口地址:https://open.xjguoyu.cn/api/auth/oauth/token,请求方式:GET,POST Access token是调用服务API的凭证,调用服务API之前需要获取 token。每次成功获取 token 以后只有…...