Linux安装vLLM模型推理框架问题总汇

news2024/12/25 10:35:00

简介

vLLM 是一个专为大规模语言模型(Large Language Models, LLM)推理优化的服务框架和推理引擎。它可以高效地管理和部署预先训练好的大型语言模型,尤其是那些具有极高参数数量和复杂度的模型,如GPT系列及其他基于Transformer架构的模型。

vLLM的主要特点包括:

  1. 高吞吐量服务:通过采用诸如PagedAttention这样的技术,vLLM能够有效地管理内存并提高注意力机制中Key和Value的处理效率,从而提升模型推理的速度和并发处理能力。

  2. 内存优化:vLLM通过动态内存管理、KV缓存技术和分页算法降低模型在推理过程中所需的内存,使得大规模模型能在有限的硬件资源下稳定运行。

  3. 批处理:支持对传入请求进行连续批处理,提高了计算资源的利用率和整体响应速度。

  4. CUDA优化:针对CUDA图形处理器进行了内核级别的优化,使得模型能够在GPU上高效执行。

  5. 量化支持:提供多种量化技术,如GPTQ、AWQ、SqueezeLLM和FP8 KV缓存等,以减小模型在内存和带宽上的开销。

  6. 易用部署:通过简化API和命令行接口,vLLM允许用户便捷地部署和管理模型服务,同时也支持与OpenAI GPT-3 API类似的RESTful API。

  7. 模型并行:支持模型在多个GPU上进行并行运算,利用pipeline parallelism、tensor parallelism等技术进一步提升推理性能。

通过vLLM,开发者和企业能够更容易地将大型预训练模型应用到实际场景中,如智能问答、文本生成、聊天机器人等,同时保证高性能和低延迟的服务体验。

安装

1.安装显卡驱动

首先确保自己的服务器,是不是nvidia显卡,有没有安装nvidia驱动。下面以Ubuntu系统为例
在Ubuntu系统中查询显卡信息,可以使用以下命令:

  1. 使用lshw命令查看详细硬件信息,包括显卡部分:

    sudo lshw -C display
    
  2. 使用lspci命令快速查看PCI设备列表中有关显卡的部分:

    lspci | grep -i vga -A 12
    

    或简化版(只显示显卡基本信息):

    lspci -k | grep -A 2 -i "VGA"
    
  3. 如果系统中有NVIDIA显卡并且已安装了NVIDIA驱动,可以使用nvidia-smi命令获取更详尽的NVIDIA显卡信息,包括显存使用情况、驱动版本、GPU温度等:

    nvidia-smi
    
  4. 对于AMD显卡,若已安装ATI/AMD显卡驱动,可以尝试使用aticonfig(但这在现代AMD显卡驱动中已不常用)。

  5. 若想查看当前已安装的显卡驱动情况,可以通过Ubuntu的“附加驱动”工具进行查看:

    sudo ubuntu-drivers devices
    

    或者通过GUI方式:

    • 打开Ubuntu系统桌面,点击左上角的搜索按钮,搜索“驱动”或“Software & Updates”(软件与更新)。
    • 进入“附加驱动”标签页,系统会扫描并列出可用于系统中硬件设备的驱动程序,其中包括显卡驱动。

通过上述命令或图形界面操作,您可以获取到Ubuntu系统中显卡的基本信息和驱动状态。

2.安装vLLM框架

安装命令:

pip install -U vllm
  • 在 pip install 命令中,-U 或 --upgrade 选项用于升级指定的包到最新版本。如果该包尚未安装,此命令将首先安装它。

pip未安装

如果提示 pip: command not found 则用下面命令:

sudo python3 -m pip install -U vllm

或者执行命令:

apt install python3-pip
pip install -U vllm

网络问题

由于vllm的下载源是国外的网络可能不稳定,安装时候如果报错如下:

 ERROR: Could not find a version that satisfies the requirement numpy (from vllm) (from versions: none) 
 ERROR: No matching distribution found for numpy (from vllm) 

则执行一下命令,设定超时时间下载:

pip install --default-timeout=100 --upgrade vllm
  • –default设定超时100s,更新下载vllm

torch和triton版本兼容问题

ERROR: torch 2.1.2 has requirement triton==2.1.0; platform_system == "Linux" and platform_machine == "x86_64", but you'll have triton 2.2.0 which is incompatible.
  • 异常指出当前环境中安装的torch版本2.1.2要求triton版本为2.1.0,然而即将安装的是2.2.0版本,两者之间存在兼容性问题。为了解决此问题,要么需要降级triton至2.1.0版本,要么升级torch至支持triton 2.2.0的版本。因为当前vllm版本依赖于 torch 2.1.2,升级torch 会导致vllm安装失败,所以只能降级triton至2.1.0版本。

当你在安装或升级PyTorch的过程中遇到这样的错误信息,表明当前环境中安装的triton版本与PyTorch 2.1.2要求的triton版本不兼容。为了解决这个问题,你需要确保安装与PyTorch 2.1.2兼容的triton版本(即2.1.0)。

以下是解决步骤:

  1. 卸载现有不兼容的triton版本

    pip uninstall triton
    
  2. 安装PyTorch 2.1.2所需的triton 2.1.0版本
    由于triton的安装方式可能因项目和发布时间而异,你可能需要去triton项目的GitHub仓库或其他官方发布的渠道找到2.1.0版本的具体安装命令。若triton可通过pip安装,命令可能是类似于:

   pip install triton==2.1.0

如何安装过慢,使用国内的下载源

pip install triton==2.1.0 -i https://pypi.tuna.tsinghua.edu.cn/simple

在实际操作前,请查阅triton和PyTorch的官方文档,以获取最新和正确的安装指引。由于triton并非PyTorch的标准依赖项,具体的安装过程可能会有所不同,取决于项目的需求和当时的发布情况。如果triton与特定版本的PyTorch有强绑定关系,也可能需要从PyTorch官方或者其他可靠的第三方源获取triton的特定版本。

最后重新执行安装vllm的命令:

pip install -U vllm

3.检查vllm是否安装成功

执行命令:

pip show vllm

输出一下内容,证明安装成功:

Name: vllm
Version: 0.3.3
Summary: A high-throughput and memory-efficient inference and serving engine for LLMs
Home-page: https://github.com/vllm-project/vllm
Author: vLLM Team
Author-email: None
License: Apache 2.0
Location: /usr/local/lib/python3.8/dist-packages
Requires: torch, sentencepiece, xformers, prometheus-client, triton, uvicorn, ninja, ray, psutil, transformers, pynvml, numpy, outlines, fastapi, cupy-cuda12x, pydantic
Required-by: 

运行大模型api服务

执行以下命令:

python3 -m vllm.entrypoints.openai.api_server --served-model-name Qwen1.5-7B-Chat --model Qwen/Qwen1.5-7B-Chat
  • 默认会根据–model的值,从本地路径找模型,没有找到就会从’https://huggingface.co 网站上下载模型,国内因为网络原因不能下载。

通过git下载模型

从https://www.modelscope.cn/models下载模型。
在这里插入图片描述
执行git下载命令:

cd /
mkdir models
git clone https://www.modelscope.cn/qwen/Qwen1.5-7B.git

执行以下命令:

python3 -m vllm.entrypoints.openai.api_server  --model /models/Qwen1.5-7B-Chat --trust-remote-code --port=8081 --served-model-name qwen/Qwen-7B-Chat 
  • Qwen1.5-7B模型会下载在/models文件中
  • --served-model-name 指定模型服务名,不设置模型服务名即--model的名一样

vllm直接支持modelscope模型

可以通过设置环境变量使得vllm从www.modelscope.cn下载模型,到本地modelscope模型库里。

启动普通server
VLLM_USE_MODELSCOPE=True python3 -m vllm.entrypoints.api_server  --model="qwen/Qwen-7B-Chat" --revision="v1.1.8" --trust-remote-code --port=8081
启动openai兼容接口
VLLM_USE_MODELSCOPE=True python3 -m vllm.entrypoints.openai.api_server  --model="qwen/Qwen-7B-Chat" --revision="v1.1.8" --trust-remote-code  --port=8081

如果模型在modelscope cache目录已经存在,则会直接使用cache中的模型,否则会从www.modelscope.cn下载模型

常见报错

如果报以下错误:

Traceback (most recent call last):
  File "/usr/lib/python3.8/runpy.py", line 194, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "/usr/lib/python3.8/runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "/usr/local/lib/python3.8/dist-packages/vllm/entrypoints/api_server.py", line 96, in <module>
    engine = AsyncLLMEngine.from_engine_args(engine_args)
  File "/usr/local/lib/python3.8/dist-packages/vllm/engine/async_llm_engine.py", line 628, in from_engine_args
    engine = cls(parallel_config.worker_use_ray,
  File "/usr/local/lib/python3.8/dist-packages/vllm/engine/async_llm_engine.py", line 321, in __init__
    self.engine = self._init_engine(*args, **kwargs)
  File "/usr/local/lib/python3.8/dist-packages/vllm/engine/async_llm_engine.py", line 369, in _init_engine
    return engine_class(*args, **kwargs)
  File "/usr/local/lib/python3.8/dist-packages/vllm/engine/llm_engine.py", line 117, in __init__
    self._init_tokenizer()
  File "/usr/local/lib/python3.8/dist-packages/vllm/engine/llm_engine.py", line 192, in _init_tokenizer
    self.tokenizer: TokenizerGroup = TokenizerGroup(
  File "/usr/local/lib/python3.8/dist-packages/vllm/transformers_utils/tokenizer.py", line 100, in __init__
    self.tokenizer = get_tokenizer(self.tokenizer_id, **tokenizer_config)
  File "/usr/local/lib/python3.8/dist-packages/vllm/transformers_utils/tokenizer.py", line 30, in get_tokenizer
    tokenizer = AutoTokenizer.from_pretrained(
  File "/usr/local/lib/python3.8/dist-packages/transformers/models/auto/tokenization_auto.py", line 806, in from_pretrained
    tokenizer_class = get_class_from_dynamic_module(class_ref, pretrained_model_name_or_path, **kwargs)
  File "/usr/local/lib/python3.8/dist-packages/transformers/dynamic_module_utils.py", line 488, in get_class_from_dynamic_module
    final_module = get_cached_module_file(
  File "/usr/local/lib/python3.8/dist-packages/transformers/dynamic_module_utils.py", line 314, in get_cached_module_file
    modules_needed = check_imports(resolved_module_file)
  File "/usr/local/lib/python3.8/dist-packages/transformers/dynamic_module_utils.py", line 180, in check_imports
    raise ImportError(
ImportError: This modeling file requires the following packages that were not found in your environment: tiktoken. Run `pip install tiktoken`

执行命令,安装 tiktoken库

pip install tiktoken

安装成功后,再执行 启动模型命令即可。

如果报以下错误:

Traceback (most recent call last):
  File "/usr/lib/python3.8/runpy.py", line 194, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "/usr/lib/python3.8/runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "/usr/local/lib/python3.8/dist-packages/vllm/entrypoints/openai/api_server.py", line 22, in <module>
    from vllm.entrypoints.openai.serving_chat import OpenAIServingChat
  File "/usr/local/lib/python3.8/dist-packages/vllm/entrypoints/openai/serving_chat.py", line 15, in <module>
    from vllm.model_executor.guided_decoding import get_guided_decoding_logits_processor
  File "/usr/local/lib/python3.8/dist-packages/vllm/model_executor/guided_decoding.py", line 12, in <module>
    from vllm.model_executor.guided_logits_processors import JSONLogitsProcessor, RegexLogitsProcessor
  File "/usr/local/lib/python3.8/dist-packages/vllm/model_executor/guided_logits_processors.py", line 23, in <module>
    from outlines.fsm.fsm import RegexFSM
  File "/usr/local/lib/python3.8/dist-packages/outlines/__init__.py", line 2, in <module>
    import outlines.generate
  File "/usr/local/lib/python3.8/dist-packages/outlines/generate/__init__.py", line 2, in <module>
    from .cfg import cfg
  File "/usr/local/lib/python3.8/dist-packages/outlines/generate/cfg.py", line 5, in <module>
    from outlines.models import OpenAI
  File "/usr/local/lib/python3.8/dist-packages/outlines/models/__init__.py", line 11, in <module>
    from .llamacpp import LlamaCpp, llamacpp
  File "/usr/local/lib/python3.8/dist-packages/outlines/models/llamacpp.py", line 5, in <module>
    from outlines.integrations.llamacpp import (  # noqa: F401
  File "/usr/local/lib/python3.8/dist-packages/outlines/integrations/llamacpp.py", line 37, in <module>
    from outlines.fsm.json_schema import build_regex_from_schema
  File "/usr/local/lib/python3.8/dist-packages/outlines/fsm/json_schema.py", line 6, in <module>
    from jsonschema.protocols import Validator
ModuleNotFoundError: No module named 'jsonschema.protocols'

从错误信息来看,虽然vllm及相关的依赖已经安装,但在运行过程中出现了新的错误:“ModuleNotFoundError: No module named ‘jsonschema.protocols’”。这意味着在执行程序时,Python无法找到jsonschema库中的protocols模块。

要解决这个问题,请确保jsonschema库及其所有必需的组件都已正确安装且是最新的版本。您可以按照以下步骤操作:

pip install --upgrade jsonschema

如果报以下错误:

INFO 03-15 05:20:25 api_server.py:228] args: Namespace(allow_credentials=False, allowed_headers=['*'], allowed_methods=['*'], allowed_origins=['*'], api_key=None, block_size=16, chat_template=None, code_revision=None, device='auto', disable_custom_all_reduce=False, disable_log_requests=False, disable_log_stats=False, download_dir=None, dtype='auto', enable_lora=False, enforce_eager=False, engine_use_ray=False, gpu_memory_utilization=0.9, host=None, kv_cache_dtype='auto', load_format='auto', lora_dtype='auto', lora_extra_vocab_size=256, lora_modules=None, max_context_len_to_capture=8192, max_cpu_loras=None, max_log_len=None, max_lora_rank=16, max_loras=1, max_model_len=None, max_num_batched_tokens=None, max_num_seqs=256, max_paddings=256, max_parallel_loading_workers=None, middleware=[], model='Qwen/Qwen1.5-7B-Chat', pipeline_parallel_size=1, port=8000, quantization=None, response_role='assistant', revision=None, root_path=None, seed=0, served_model_name='Qwen1.5-7B-Chat', ssl_certfile=None, ssl_keyfile=None, swap_space=4, tensor_parallel_size=1, tokenizer=None, tokenizer_mode='auto', tokenizer_revision=None, trust_remote_code=False, worker_use_ray=False)
/usr/local/lib/python3.8/dist-packages/torch/cuda/__init__.py:138: UserWarning: CUDA initialization: The NVIDIA driver on your system is too old (found version 11040). Please update your GPU driver by downloading and installing a new version from the URL: http://www.nvidia.com/Download/index.aspx Alternatively, go to: https://pytorch.org to install a PyTorch version that has been compiled with your version of the CUDA driver. (Triggered internally at ../c10/cuda/CUDAFunctions.cpp:108.)
  return torch._C._cuda_getDeviceCount() > 0
Traceback (most recent call last):
  File "/usr/lib/python3.8/runpy.py", line 194, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "/usr/lib/python3.8/runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "/usr/local/lib/python3.8/dist-packages/vllm/entrypoints/openai/api_server.py", line 236, in <module>
    engine = AsyncLLMEngine.from_engine_args(engine_args)
  File "/usr/local/lib/python3.8/dist-packages/vllm/engine/async_llm_engine.py", line 622, in from_engine_args
    engine_configs = engine_args.create_engine_configs()
  File "/usr/local/lib/python3.8/dist-packages/vllm/engine/arg_utils.py", line 286, in create_engine_configs
    device_config = DeviceConfig(self.device)
  File "/usr/local/lib/python3.8/dist-packages/vllm/config.py", line 496, in __init__
    raise RuntimeError("No supported device detected.")
RuntimeError: No supported device detected.

从您提供的错误信息可以看出存在两个主要问题:

  1. CUDA驱动版本过旧
    错误信息中提到"NVIDIA driver on your system is too old",并且给出了更新驱动的链接。这意味着当前的CUDA驱动版本无法与您正在尝试运行的PyTorch版本兼容。解决方法是按照提示更新NVIDIA GPU驱动程序。访问NVIDIA官网下载适用于您系统的最新驱动,并按照安装指南进行更新。

  2. No supported device detected
    错误消息最后显示"No supported device detected",表示VLLM引擎未能检测到任何可用的计算设备。这可能是因为更新驱动程序后未重启系统,或者是驱动程序与硬件不匹配,或者GPU不支持所需的功能。

解决步骤如下:

  • 更新NVIDIA驱动
    在Ubuntu系统中更新NVIDIA显卡驱动,可以按照以下步骤进行操作:
  1. 打开终端:

    Ctrl + Alt + T
    
  2. 更新系统包列表:

    sudo apt update
    
  3. 安装NVIDIA驱动(如果Ubuntu仓库中有可用的更新版本):

    sudo apt upgrade nvidia-driver-*
    
  4. 安装最新版驱动

    apt install nvidia-utils-550
    
  5. 重启系统以加载新驱动:

    sudo reboot
    
  • 确认GPU支持
    确保您的GPU硬件能够支持所需的CUDA版本以及VLLM框架要求的特性。

  • 检查CUDA版本与PyTorch兼容性
    确保安装的PyTorch版本与更新后的CUDA驱动兼容。如有必要,按照PyTorch官网提供的指南安装与当前CUDA版本适配的PyTorch版本。

  • 重新运行应用

    sudo reboot
    

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

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

相关文章

算法打卡day19|二叉树篇08|Leetcode 235. 二叉搜索树的最近公共祖先、701.二叉搜索树中的插入操作、450.删除二叉搜索树中的节点

算法题 Leetcode 235. 二叉搜索树的最近公共祖先 题目链接:235. 二叉搜索树的最近公共祖先 大佬视频讲解&#xff1a;二叉搜索树的最近公共祖先视频讲解 个人思路 昨天做过一道二叉树的最近公共祖先&#xff0c;而这道是二叉搜索树&#xff0c;那就要好好利用这个有序的特点…

数据库-mysql安装

我们使用两种方式安装配置mysql数据库 一种采用无安装绿色版 一种采用官方提供的msi&#xff0c;windows安装版 亲测两种都可运行&#xff0c;有的电脑可能其中一种不能运行那可以尝试另外一种&#xff0c;有条件的同学可以试试docker版。 mysql安装 初次安装mysql之前建议大家…

代码随想录day18(2)二叉树:翻转二叉树(leetcode226)

题目要求&#xff1a;将一棵二叉树翻转 思路&#xff1a;若想要翻转二叉树&#xff0c;只需要用swap函数将左右孩子节点翻转即可。注意前序和后序遍历均可&#xff0c;但是对于中序来说会将某些结点的左右孩子翻转了两次&#xff08;画图很明显&#xff09;&#xff0c;硬要用…

工作总结!日志打印的11条建议

前言 大家好&#xff0c;我是 JavaPub。日志是我们定位问题的得力助手&#xff0c;也是我们团队间协作沟通&#xff08;甩锅&#xff09;、明确责任归属&#xff08;撕B&#xff09;的利器。没有日志的程序运行起来就如同脱缰的野&#x1f40e;。打印日志非常重要。今天我们来…

开发指南005-前端配置文件

平台要求无论前端还是后端&#xff0c;修改配置可以直接用记事本修改&#xff0c;无需重新打包或修改压缩包里文件。就前端而言&#xff0c;很多系统修改配置是在代码里修改&#xff0c;然后打包或者是修改编译环境来重新编译。 平台前端的配置文件为/static/js/下qlm_config.j…

家电工厂5G智能制造数字孪生可视化平台,推进家电工业数字化转型

家电5G智能制造工厂数字孪生可视化平台&#xff0c;推进家电工业数字化转型。随着科技的飞速发展&#xff0c;家电行业正迎来一场前所未有的数字化转型。在这场制造业数字化转型中&#xff0c;家电5G智能制造工厂数字孪生可视化平台扮演着至关重要的角色。本文将从数字孪生技术…

SwinTransformer论文笔记

What&#xff1a;Swin Transformer 用了移动窗口的层级式的Vision Transformer. Swin Transformer的思想是让Vision Transformer也能像CNN一样也能分成几个block&#xff0c;也能做层级式的特征提取&#xff0c;从而让提取的特征具有多尺度的概念。&#xff08;设计的初衷是作为…

计算机二级Python题目13

目录 1. 基本题 1.1 基本题1 1.2 基本题2 1.3 基本题3 2. turtle画图 3. 大题 3.1 大题1 3.2 大题2 1. 基本题 1.1 基本题1 lseval(input()) s"" for item in ls:if type(item)type("香山"):s item print(s) 1.2 基本题2 import random random.se…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的手写数字和符号识别(深度学习训练+UI界面+训练数据集)

摘要&#xff1a;开发手写数字和符号识别对于智能交互系统具有关键作用。本篇博客详细介绍了如何运用深度学习构建一个手写数字和符号识别&#xff0c;并提供了完整的实现代码。该系统基于强大的YOLOv8算法&#xff0c;并对比了YOLOv7、YOLOv6、YOLOv5&#xff0c;展示了不同模…

电源常用通讯电路详解

数字电源的采样和PWM驱动电路原理&#xff0c;通过这些技术&#xff0c;数字电源可以在内部形成控制闭环。但是要实现电源的控制和管理&#xff0c;还是需要与数字控制核心建立通讯连接。本期将带领大家了解数字电源常用的通讯电路。 一、常用的通讯方式 在前面数字电源与模拟…

运行gazebo机器人模型没有cmd_vel话题

运行赵虚左教程代码出现上诉问题 roslaunch urdf02_gazebo demo03_env.launch 原因&#xff1a;缺少某个包 在工作空间catkin_make编译发现报错 解决&#xff1a; sudo apt-get install ros-noetic-gazebo-ros-pkgs ros-noetic-gazebo-ros-control 下载后再次运行launch文件…

redis中List和hash数据类型

list类型是用来存储多个有序的字符串的&#xff0c;列表当中的每一个字符看做一个元素&#xff0c;一个列表当中可以存储一个或者多个元素&#xff0c;redis的list支持存储2^32-1个元素。redis可以从列表的两端进行插入&#xff08;pubsh&#xff09;和弹出&#xff08;pop&…

Flink 集群部署模式

文章目录 前言一、会话模式&#xff08;Session Mode&#xff09;二、单作业模式&#xff08;Per-Job Mode&#xff09;三、应用模式&#xff08;Application Mode&#xff09; 前言 Flink支持多种集群部署模式&#xff0c;以满足不同场景和需求。以下是Flink的主要集群部署模…

外包干了3天,技术明显进步。。。。。

先说一下自己的情况&#xff0c;本科生&#xff0c;19年通过校招进入南京某软件公司&#xff0c;干了接近2年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了2年的功能测试&…

奇怪的比赛(Python,递归,状态压缩动态规划dp)

目录 前言&#xff1a;题目&#xff1a;思路&#xff1a;递归&#xff1a;代码及详细注释&#xff1a; 状态压缩dp&#xff1a;代码及详细注释&#xff1a; 总结&#xff1a; 前言&#xff1a; 这道题原本是蓝桥上的题&#xff0c;现在搜不到了&#xff0c;网上关于此题的讲解…

【ESP32接入国产大模型之MiniMax】

1. MiniMax 讲解视频&#xff1a; ESP32接入语言大模型之MiniMax MM智能助理是一款由MiniMax自研的&#xff0c;没有调用其他产品的接口的大型语言模型。MiniMax是一家中国科技公司&#xff0c;一直致力于进行大模型相关的研究。 随着人工智能技术的不断发展&#xff0c;自然语…

springboot绩效管理系统(源码私信呢)

链接如下: 20240316_173655_哔哩哔哩_bilibili 代码解析理解&#xff1a; 前置知识:三层架构: con...>ser接口>imp接口实现类>mapper写sql语句Controller 层控制层-->调用业务方法来控制业务逻辑 &#xff0c;功能的请求和响应控制&#xff0c;controller层负责前…

减肥实践和经验分享

在当下竞争激烈、物质丰富的现代社会&#xff0c;每个人都会同时面临两个不同指向的问题 和别人竞争&#xff0c;实现个人价值&#xff0c;创造个人财富&#xff0c;此为&#xff1a;显性指向&#xff08;explicit&#xff09;和自己比拼&#xff0c;实现个人内在提升&#xf…

数据库——书籍+内容0.1版本

背景&#xff1a;将一本书&#xff0c;存入我们的数据库中&#xff0c;并可以查出来 采用&#xff1a;第三范式&#xff08;3NF&#xff09;设计模式 设计数据库模板 第一范式&#xff08;1NF&#xff09;&#xff1a;确保表的每一列都是不可分割的原子数据项。 第二范式&…

什么时候去检测大数据信用风险比较合适?

什么时候去检测大数据信用风险比较合适?在当今这个数据驱动的时代&#xff0c;大数据信用风险检测已经成为个人的一项重要需求。本文将从贷前检测、信息泄露检测和定期检测三个方面&#xff0c;阐述何时进行大数据信用风险检测较为合适。 一、贷前检测 大数据信用风险检测在贷…