用云服务器构建gpt和stable-diffusion大模型

news2024/11/18 21:26:23

用云服务器构建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)中用来管理软件包的命令行工具。它的主要作用包括:

    1. 安装软件包:使用 apt-get install 命令可以安装指定的软件包,系统会自动解决依赖关系并下载安装所需的软件包。
    2. 升级软件包:通过 apt-get upgrade 命令可以升级系统中已安装的软件包到最新版本。系统会检查可用的更新并进行相应的升级操作。
    3. 移除软件包:使用 apt-get remove 命令可以移除系统中已安装的软件包,同时也会移除其相关的配置文件。
    4. 清理无用的软件包:通过 apt-get autoremove 命令可以清理掉系统中不再需要的无用软件包。这些软件包通常是因为其他软件的升级或移除而留下来的。
    5. 更新软件包列表:使用 apt-get update 命令可以更新本地软件包列表,以获取最新的软件包信息,包括可用的更新和安全修复程序。
    6. 升级发行版:通过 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、创建镜像流程
  • 点击右上角将当前环境制作为镜像

    image-20240311114056429

  • 填写镜像名称,构建镜像,填写自定义镜像名称后,在Dockerfile中选择智能生成或者直接填写下边内容,以之前选择的基础镜像,创建镜像。
    在这里插入图片描述

    RUN apt-get update && apt-get install unzip
    
    RUN 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 pip
    
    RUN 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
    
  • 等待镜像构建
    在这里插入图片描述

  • 构建成功后,在开发环境实例中修改镜像

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

    img

这样子之后就不用重复配置环境了。

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” 的缩写。

    1. 创建归档文件(打包)

      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 进行压缩

    2. 提取归档文件(解压)

      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

    在这里插入图片描述

    访问这个网址就可以直接使用啦
    在这里插入图片描述

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

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

相关文章

利用HubSpot出海CRM和人工智能技术提升出海业务的效率和效果

在当今数字化时代&#xff0c;智能化营销已经成为企业获取客户和扩大市场份额的关键策略。特别是对于出海业务而言&#xff0c;利用智能化营销技术来应对不同文化、语言和市场的挑战&#xff0c;已经成为企业竞争的关键优势。今天运营坛将带领大家探讨如何利用HubSpot CRM和人工…

JVM 重要知识梳理

一、java内存区域 程序计数器&#xff1a;线程私有&#xff0c;唯一一个不会出现outOfMemoryError的内存区域虚拟机栈&#xff1a;线程私有&#xff0c;栈由一个个栈帧组成&#xff0c;而每个栈帧中都拥有&#xff1a;局部变量表、操作数栈、动态链接、方法返回地址。本地方法…

Prompt Learning:人工智能的新篇章

开篇&#xff1a;AI的进化之旅 想象一下&#xff0c;你正在和一位智能助手对话&#xff0c;它不仅理解你的问题&#xff0c;还能提出引导性的问题帮助你更深入地思考。这正是prompt learning的魔力所在——它让机器学习模型变得更加智能和互动。在这篇博客中&#xff0c;我们将…

【JavaScript】面试手撕柯里化函数

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 引入柯里化定义实现快速使用柯里化的作用提高自由度bind函数 参考资料 引入 上周…

git区域与对象

大纲 工作区(workspace directory):本机的代码项目,是一种沙箱环境 暂存区(stage index):工作区在程序员写程序的过程中会发生无数次改动&#xff0c;git不可能记录每一次的改动&#xff0c;这些改动的过程在暂存区负责记录&#xff0c;暂存区会将最终的状态随着程序员的提交…

springboot与elasticsearch-7.16.2的基础CRUD使用——入门向

highlight: an-old-hope 基于elasticsearch-7.16.2 &#xff0c;使用的是旧版的高级客户端 restHighLevelClient springboot版本2.6.13 项目原代码地址 https://gitee.com/kenwm/es7demo.git 参考博客 1、SpringBoot集成ElasticSearch&#xff0c;实现模糊查询&#xff0c;批…

学python新手如何安装pycharm;python小白如何安装pycharm

首先找到官网&#xff1a; Download PyCharm: The Python IDE for data science and web development by JetBrains 打开后选择下载&#xff0c;下图标红部分 点击exe程序&#xff0c;点击下一步&#xff01; 选择安装路径&#xff0c;下一步 弹出界面全选 选择默认 然后直接…

Spring核心接口:BeanFactory接口

一图胜千言 BeanFactory 属性&方法解析 点击展开注意&#xff1a;以上代码仅供参考&#xff0c;可能存在不完整或不准确的情况。 public interface BeanFactory {// 根据Bean名称返回Bean实例。// 如果Bean不存在&#xff0c;则抛出NoSuchBeanDefinitionException异常。Obj…

华为机考:HJ43 迷宫问题

华为机考&#xff1a;HJ43 迷宫问题 描述 DFS 从迷宫入口开始进行dfs搜索&#xff0c;每次进入一个点&#xff0c;将其加入临时路径数组中&#xff0c;把该位改成0表示不能进入&#xff0c;然后依次搜索该位下、右、上、左四个方向的点&#xff0c;如果搜索的这个点可以进入则…

【机器学习智能硬件开发全解】(二)—— 政安晨:嵌入式系统基本素养【处理器原理】

嵌入式系统的基本素养包括以下几个方面&#xff1a; 硬件知识&#xff1a;嵌入式系统通常由硬件和软件组成&#xff0c;了解和熟悉硬件的基本知识&#xff0c;包括微处理器、存储器、外设等&#xff0c;并了解它们的工作原理和特性。 软件编程&#xff1a;熟悉至少一种编程语言…

STM32模拟I2C控制TM1650数码管显示电压电流

模拟I2C控制TM1650数码管显示电压电流 数码管的逻辑TM1650 原理模拟I2C的实现TM1650驱动电压电流显示 数码管的逻辑 通过数码管来表示字符。 数码管的abcdefg和dp分别对应这发送过去的8位数据位比如0x3F -> 0011 1111 表示0字符。 如果要加上小数点则在最高位加一&#xf…

同步整流芯片 支持12V降5V 24V降5V 24V降12V 降压芯片 H4122

惠海H4122降压恒压芯片的工作原理&#xff1a; 主要是通过内部电路和算法来控制和调节输出电压&#xff0c;使其保持恒定。 输入电压&#xff1a;芯片接收一个较高的输入电压&#xff0c;如12V、24V或36V。 开关电源转换器&#xff1a;芯片内部通常包含一个或多个开关电源转…

【python pyinstaller库】pyinstaller介绍、安装、以及相关重点知识

PyInstaller是一个在Windows、GNU/Linux、macOS等平台下将Python程序冻结&#xff08;打包&#xff09;为独立可执行文件的工具, 用于在未安装Python的平台上执行Python编写的应用程序。 相比类似工具&#xff0c;它的主要优点是 PyInstaller 与 Python 3.7-3.10 一起工作&…

StarRocks实战——云览科技存算分离实践

目录 背景 一、平台现状&痛点 1.1 使用组件多&#xff0c;维护成本高 1.2 链路冗长&#xff0c;数据时效性难以保证 1.3 服务稳定性不足 二、StarRocks 存算分离调研 2.1 性能对比 2.2 易用性 2.3 存储成本 三、StarRocks 存算分离实践 3.1 查询优化 3.1.1 物化…

SyntaxError: Unexpected end of JsON input J50N.parse....报错

const userInfoJSON.parse(uni.getStorageSync(userInfo))改成 const userInfouni.getStorageSync(userInfo)&& JSON.parse(uni.getStorageSync(userInfo)) //不报错

ChatGPT国内能用吗?中国用户怎么才能使用ChatGPT?

与ChatGPT类似的国内网站&#xff0c;他们都能提供和ChatGPT相似的能力&#xff0c;而且可以在国内直接使用。 点击直达方式 百科GPT官网&#xff1a;baikegpt.cn ChatGPT是基于GPT-3.5架构的语言模型的一个实例&#xff0c;由OpenAI开发。以下是ChatGPT的发展历史&#xff1…

深入理解Python中的面向对象编程(OOP)【第129篇—Scikit-learn的入门】

深入理解Python中的面向对象编程&#xff08;OOP&#xff09; 在Python编程领域中&#xff0c;面向对象编程&#xff08;Object-Oriented Programming&#xff0c;简称OOP&#xff09;是一种强大而灵活的编程范式&#xff0c;它允许开发者以对象为中心组织代码&#xff0c;使得…

Redis7.2.4分片集群搭建

Redis分片集群搭建 1.集群结构 分片集群需要的节点数量较多&#xff0c;这里我们搭建一个最小的分片集群&#xff0c;包含3个master节点&#xff0c;每个master包含一个slave节点&#xff0c;结构如下&#xff1a; 信息如下&#xff1a; IPPORT角色glnode036379slaveglnode0…

JavaEE:文件IO

硬盘 文件指的是硬盘/磁盘上的文件 ⚠硬盘 ≠ 磁盘 磁盘属于外存的一种&#xff1b;而软盘&#xff0c;硬盘&#xff08;机械硬盘&#xff09;这种属于用磁性介质来存储二进制数据 ssd硬盘&#xff08;固态硬盘&#xff09;&#xff0c;内部完全是集成电路&#xff0c;和磁…

手写简易操作系统(七)--加载操作系统内核

前情提要 上一节中&#xff0c;我们开启了内存分页&#xff0c;这一节中&#xff0c;我们将加载内核&#xff0c;内核是用C语言写的&#xff0c;C语言编译完了是一段ELF可加载程序&#xff0c;所以我们需要学会解析ELF格式文件&#xff0c;并将内核加载到内存 一、ELF格式 程…