当前位置: 首页 > news >正文

【大模型实战篇】Mac本地部署RAGFlow的踩坑史

1. 题外话

        最近一篇文章还是在11月30日写的,好长时间没有打卡了。最近工作上的事情特别多,主要聚焦在大模型的预训练、微调和RAG两个方面。主要用到的框架是Megatron-DeepSpeed,后续会带来一些分享。今天的文章主要聚焦在RAG。

        近期调研了一系列开源的RAG框架(约20多个开源项目),相对来说,RAGFlow【1】更贴合我的需求,因此就花了一些时间去研究,本文分享下在Mac系统本地化部署的实践。通过本地化部署和使用,能够更好的帮助你分析其中的一些能力以及理解代码。不过话说回来,虽然RAGFlow的demo使用还是挺可以的,但开源项目的代码质量和文档质量不得不令人吐槽,希望该项目的作者能够重视起来。

2. Mac系统部署   

       我们采用从源码部署的模式【2】。由于0.15.1似乎对mac的支持不够,因此回退到0.14.1版本。后续的安装是基于0.14.1版本进行,这个需要说明一下。

        这里说一下我本地的mac系统信息:

芯片:Apple M2 Pro

内存:16G

macOS: Ventura 13.4

2.1 资源要求

  • CPU ≥ 4 cores
  • RAM ≥ 16 GB
  • Disk ≥ 50 GB
  • Docker ≥ 24.0.0 & Docker Compose ≥ v2.26.1

Mac查看cpu信息

> sysctl -a | grep machdep.cpu

machdep.cpu.cores_per_package: 10

machdep.cpu.core_count: 10

machdep.cpu.logical_per_package: 10

machdep.cpu.thread_count: 10

machdep.cpu.brand_string: Apple M2 Pro

2.2 安装pipx

> python -m pip install --user pipx

配置启动:

> python -m site --user-base

> nano ~/.zshrc

添加以下指令到.zshrc:

export PATH="/path/to/user_base/bin:$PATH"

生效:

> source ~/.zshrc

接下来可以使用pipx:

> pipx

usage: pipx [-h] [--quiet] [--verbose] [--global] [--version]

            {install,install-all,uninject,inject,pin,unpin,upgrade,upgrade-all,upgrade-shared,uninstall,uninstall-all,reinstall,reinstall-all,list,interpreter,run,runpip,ensurepath,environment,completions}

            ...

Install and execute apps from Python packages.

Binaries can either be installed globally into isolated Virtual Environments

or run directly in a temporary Virtual Environment.

2.3 安装poetry

pipx install poetry 

配置:

export POETRY_VIRTUALENVS_CREATE=true POETRY_VIRTUALENVS_IN_PROJECT=true

2.4 安装依赖包

瘦身版:

~/.local/bin/poetry install --sync --no-root

完整版:

~/.local/bin/poetry install --sync --no-root --with full

注意:此时安装会报xgboost的安装错误,原因是xgboost 包的版本 1.5.0 不支持 PEP 517 构建标准,而 Poetry 默认使用 PEP 517 来处理依赖包的安装【3】。

解决方案为编辑 pyproject.toml 文件,在 [tool.poetry.dependencies] 部分,调整 xgboost 的版本范围,xgboost = "^1.6.0", 然后保存修改。

使用以下命令重新生成 poetry.lock 文件:

~/.local/bin/poetry lock

根据 pyproject.toml 文件的依赖定义,更新或重新生成 poetry.lock 文件。完成后再次执行

~/.local/bin/poetry install --sync --no-root

安装依赖顺利完成。

2.5 启动第三方服务 

使用 Docker Compose 启动 ‘base’ 服务(MinIO、Elasticsearch、Redis 和 MySQL)

docker compose -f docker/docker-compose-base.yml up -d

这里也遇到docker compose的问题,可能需要涉及到重新安装,看你的版本,如果是高版本,则需要安装一个docker-compose的extension包,否则安装docker-compose。确保你的docker-compose版本在v2.26.1及以上。

另外,可以添加docker的国内加速镜像,能够顺利一些。

2.6 启动 RAGFlow 后端服务 

在 docker/entrypoint.sh 文件中注释掉 nginx 这一行。

# /usr/sbin/nginx

回退路径到ragflow目录,激活 Python 虚拟环境:

> source .venv/bin/activate

> export PYTHONPATH=$(pwd)

如果无法访问 HuggingFace,可以设置 HF_ENDPOINT 环境变量以使用镜像站点:

推荐一个 huggingface 的镜像站:https://hf-mirror.com/

export HF_ENDPOINT=https://hf-mirror.com

在ragflow路径下运行 entrypoint.sh 脚本来启动后端服务:

bash docker/entrypoint.sh

这里直接使用源码,可能会报错路径问题, /ragflow/docker/service_conf.yaml.template: No such file or directory。 需要调整一下路径【3】。具体如下:

#!/bin/bash# replace env variables in the service_conf.yaml file
rm -rf ./conf/service_conf.yaml
while IFS= read -r line || [[ -n "$line" ]]; do# Use eval to interpret the variable with default valueseval "echo \"$line\"" >> ./conf/service_conf.yaml
done < ./docker/service_conf.yaml.template# unset http proxy which maybe set by docker daemon
export http_proxy=""; export https_proxy=""; export no_proxy=""; export HTTP_PROXY=""; export HTTPS_PROXY=""; export NO_PROXY=""#/usr/sbin/nginxexport LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/PY=python3
if [[ -z "$WS" || $WS -lt 1 ]]; thenWS=1
fifunction task_exe(){while [ 1 -eq 1 ];do$PY rag/svr/task_executor.py $1;done
}for ((i=0;i<WS;i++))
dotask_exe  $i &
donewhile [ 1 -eq 1 ];do$PY api/ragflow_server.py
donewait;

另外启动过程中,可能会报一些module not found的错误,python依赖包罗列如下:

beartype, pycryptodomex, pdfplumber, polars, datrie, hanziconv, roman_numbers, cn2an strenum, tiktoken, xxhash, elasticsearch_dsl, valkey, flask_login, word2number, infinity

如果启动成功,可以看待下述的信息:

2.6 启动 RAGFlow 前端服务 

安装前端依赖项:

注:需要安装node

> cd web

> npm install --force

 安装依赖的过程又有点麻烦,出现很多次timeout

配置一下镜像:

npm config set registry https://registry.npmmirror.com/

在 .umirc.ts 中将 proxy.target 更新为 http://127.0.0.1:9380

vim .umirc.ts

启动 RAGFlow 前端服务:

npm run dev

3. 系统界面展示

4. 服务关闭

开发完成后停止 RAGFlow 服务 

停止 RAGFlow 前端服务:

pkill npm 

停止 RAGFlow 后端服务:

pkill -f “docker/entrypoint.sh”

5. 参考材料

【1】https://github.com/infiniflow/ragflow

【2】Launch the RAGFlow Service from Source

【3】源码部署RAGFlow-0.14.1

相关文章:

【大模型实战篇】Mac本地部署RAGFlow的踩坑史

1. 题外话 最近一篇文章还是在11月30日写的&#xff0c;好长时间没有打卡了。最近工作上的事情特别多&#xff0c;主要聚焦在大模型的预训练、微调和RAG两个方面。主要用到的框架是Megatron-DeepSpeed&#xff0c;后续会带来一些分享。今天的文章主要聚焦在RAG。 近期调研了一系…...

SQL Server实现将分组的其他字段数据拼接成一条数据

在 SQL Server 中&#xff0c;可以使用 STRING_AGG 函数&#xff08;SQL Server 2017 及更高版本支持&#xff09;将分组的其他字段数据拼接成一条数据。以下是示例代码&#xff1a; 假设有一个表 Orders&#xff0c;结构如下&#xff1a; OrderIDCustomerIDProduct1C001Appl…...

STM32 高级 物联网通讯之蓝牙通讯

目录 蓝牙基础知识 蓝牙概述 蓝牙产生背景 蓝牙发展历程 蓝牙技术类型 经典蓝牙(BR/EDR和AMP) 低功耗蓝牙(BLE) 市场上常见蓝牙架构 SOC蓝牙单芯片方案 SOC蓝牙+MCU方案 蓝牙host+controller分开方案 蓝牙协议栈 蓝牙芯片架构 BLE低功耗蓝牙协议栈框架 物理…...

堆排序基础与实践:如何在Java中实现堆排序

目录 一、堆排序的基本原理 二、堆排序的实现步骤 三、堆排序的时间复杂度和空间复杂度 四、堆排序的工作流程 五、堆排序的优缺点 六、堆排序的应用场景 堆排序&#xff08;Heap Sort&#xff09;是一种基于堆数据结构的排序算法。堆是一种特殊的完全二叉树&#xff0c;…...

你有哪些Deep Learning(RNN、CNN)调参的经验?

在深度学习的实践中&#xff0c;调参是一项既艺术又科学的工作。它不仅需要理论知识的支撑&#xff0c;还需要大量的实践经验。以下是一些在RNN和CNN模型调参中积累的经验&#xff0c;希望对正在这个领域摸索的朋友们有所帮助。 1. 从成熟的开源项目开始 对于初学者来说&…...

小程序租赁系统开发的优势与应用探索

内容概要 在如今这个数码科技飞速发展的时代&#xff0c;小程序租赁系统开发仿佛是一张神奇的魔法卡&#xff0c;能让租赁体验变得顺畅如丝。想象一下&#xff0c;无论你需要租用什么&#xff0c;从单车到房屋&#xff0c;甚至是派对用品&#xff0c;只需动动手指&#xff0c;…...

Spring Boot教程之三十九: 使用 Maven 将 Spring Boot 应用程序 Docker 化

如何使用 Maven 将 Spring Boot 应用程序 Docker 化&#xff1f; Docker是一个开源容器化工具&#xff0c;用于在隔离环境中构建、运行和管理应用程序。它方便开发人员捆绑其软件、库和配置文件。Docker 有助于将一个容器与另一个容器隔离。在本文中&#xff0c;为了将Spring B…...

Day58 图论part08

拓扑排序精讲 拓扑排序看上去很复杂,其实了解其原理之后,代码不难 代码随想录 import java.util.*;public class Main{public static void main (String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int m = sc.nextInt();List<List<Integer&…...

u3d中JSON数据处理

一.认识JSON 1.1 Json概述 JSON&#xff08;JavaScript Object Notation&#xff0c;JavaScript对象表示法&#xff09;JSON和XML是比较类似的技术&#xff0c;都是用来存储文本信息数据的&#xff1b;相对而言&#xff0c;JSON比XML体积更小巧&#xff0c;但是易读性不如XML…...

大语言模型(LLM)一般训练过程

大语言模型(LLM)一般训练过程 数据收集与预处理 收集:从多种来源收集海量文本数据,如互联网的新闻文章、博客、论坛,以及书籍、学术论文、社交媒体等,以涵盖丰富的语言表达和知识领域。例如,训练一个通用型的LLM时,可能会收集数十亿甚至上百亿字的文本数据.清洗:去除…...

第十六届蓝桥杯模拟赛(第一期)(C语言)

判断质因数 如果一个数p是个质数&#xff0c;同时又是整数a的约数&#xff0c;则p称为a的一个质因数。 请问2024有多少个质因数。 了解 约数&#xff0c;又称因数。整数a整除整数b&#xff0c;b为a的因数&#xff08;约数&#xff09;质数&#xff0c;又称素数。只有1和它本身两…...

某网站手势验证码识别深入浅出(全流程)

注意,本文只提供学习的思路,严禁违反法律以及破坏信息系统等行为,本文只提供思路 如有侵犯,请联系作者下架 本文识别已同步上线至OCR识别网站: http://yxlocr.nat300.top/ocr/other/20 本篇文章包含经验和教训总结,我采用了两种方法进行识别,两种方法都各有优劣,其中一…...

QT---------QT框架功能概述

常用Qt界面组件 Qt提供了丰富的界面组件&#xff0c;如QPushButton&#xff08;按钮&#xff09;、QLineEdit&#xff08;单行文本框&#xff09;、QTextEdit&#xff08;多行文本框&#xff09;、QLabel&#xff08;标签&#xff09;、QComboBox&#xff08;下拉框&#xff0…...

C++ 设计模式:模板方法(Template Method)

链接&#xff1a;C 设计模式 链接&#xff1a;C 设计模式 - 策略模式 链接&#xff1a;C 设计模式 - 观察者模式 模板方法&#xff08;Template Method&#xff09;是一种行为设计模式&#xff0c;它定义了一个操作中的算法的骨架&#xff0c;而将一些步骤延迟到子类中。通过这…...

下载mysql免安装版和配置

1、下载地址 点击去官网下载https://downloads.mysql.com/archives/community/ 2、解压安装mysql 解压的文件夹是没有my.ini文件和data目录&#xff0c;需要我们自己去创建 根目录下创建my.ini&#xff0c;根目录创建data [mysql] default-character-setutf8[mysqld] #端口 po…...

Web服务端技术原理及应用

前言 黄色的是考点&#xff0c;蓝色的是重点。 HTML/CSS/JS 本章会有一个7分的程序设计题&#xff0c;用到前端知识 form表单元素&#xff0c;常用表单元素 html:HTML快速上手 基础语法、css常用选择器&#xff08;ID、类&#xff09;、盒子模型 css:网页美化指南 JS …...

数据库的使用09:使用SSMS工具将SQLsever数据导出到Excel

第一步&#xff0c;新建一个空白的.csv文件 第二步&#xff0c;按步骤点击导出 第三步&#xff0c;选择数据源&#xff08;Db数据库&#xff09; 第四步&#xff0c;选择目标源&#xff08;CSV平面文件目标&#xff09; 第五步&#xff0c;指定表或SQL 一直点下一步即可&am…...

Python中__getitem__ 魔法方法

在Python中&#xff0c;__getitem__ 是一个特殊的方法&#xff0c;通常称为“魔法方法”或“双下方法”&#xff08;因为它们的名字前后都有两个下划线&#xff09;。__getitem__ 方法允许一个对象实现像序列&#xff08;如列表、元组、字符串&#xff09;一样的行为&#xff0…...

自动驾驶三维重建

大概八成估计是未来的科研方向了 Neural Radiance Field in Autonomous Driving: A Survey...

小程序中引入echarts(保姆级教程)

hello hello~ &#xff0c;这里是 code袁~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f981;作者简介&#xff1a;一名喜欢分享和记录学习的在校大学生…...

INNER JOIN,LEFT JOIN,RIGHT JOIN,FULL JOIN这四个怎么在gorm中使用

在 GORM 中&#xff0c;JOIN 操作是通过 Joins 方法实现的&#xff0c;而不同类型的 JOIN&#xff08;如 INNER JOIN、LEFT JOIN、RIGHT JOIN 和 FULL JOIN&#xff09;可以通过特定的 SQL 语法来表示。GORM 本身并没有直接的 INNER, LEFT, RIGHT 等专用方法&#xff0c;但可以…...

分布式版本管理工具——Git关联远程仓库(github+gitee)

Git远程仓库&#xff08;Github&#xff09;的基本使用 一、前言二、Git远程仓库介绍三、演示1. 关联github远程仓库2. 关联gitee&#xff08;码云&#xff09;远程仓库3. 重命名远程仓库名4. 移除远程仓库 四、结束语 一、前言 古之立大事者&#xff0c;不惟有超世之才&#x…...

复习打卡大数据篇——HIVE 01

目录 1. 数据仓库初识 1.1 数据仓库概念 1.2 数据仓库特点 1.3 OLTP、OLAP区别 1.4 数仓分层架构 2. HIVE初识 2.1 什么是hive&#xff1f; 2.2 hive架构 3. HIVE初体验 3.1 beeline客户端使用 1. 数据仓库初识 1.1 数据仓库概念 数据仓库&#xff0c;Data WareHou…...

第430场周赛:使每一列严格递增的最少操作次数、从盒子中找出字典序最大的字符串 Ⅰ、统计特殊子序列的数目、统计恰好有 K 个相邻元素的数组数目

Q1、使每一列严格递增的最少操作次数 1、题目描述 给你一个由 非负 整数组成的 m x n 矩阵 grid。 在一次操作中&#xff0c;你可以将任意元素 grid[i][j] 的值增加 1。 返回使 grid 的所有列 严格递增 所需的 最少 操作次数。 2、解题思路 逐列处理&#xff1a;我们需要逐…...

前端处理跨域的几种方式

什么是跨域 指一个域下文档或者脚本去请求另一个域下的资源&#xff0c;这里的跨域是广义的&#xff1b; 广义的跨域&#xff1a; 资源提跳转&#xff1a;A链接、重定向、表单提交资源潜入&#xff1a;link、script、img、frame等dom标签&#xff0c;还有样式中background:url(…...

《计算机网络A》单选题-复习题库

1. 计算机网络最突出的优点是&#xff08;D&#xff09; A、存储容量大B、将计算机技术与通信技术相结合C、集中计算D、资源共享 2. RIP 路由协议的最大跳数是&#xff08;C&#xff09; A、13B、14C、15D、16 3. 下面哪一个网络层次不属于 TCP/IP 体系模型&#xff08;D&a…...

网络安全威胁2024年中报告

下载地址&#xff1a; 网络安全威胁2024年中报告-奇安信...

Quartz - JDBC-Based JobStore事务管理及锁机制

​ 由于JDBC-Based JobStore在进行job注册、trigger注册、任务调度及执行过程中需要操作数据库&#xff0c;而且会涉及到多张表&#xff0c;比如trigger注册的时候会根据不同情况写入triggers、simple_triggers或cron_triggers表&#xff0c;在执行任务的时候会读取和更新trigg…...

机器学习作业 | 泰坦尼克号生存的预测任务

泰坦尼克号生存的预测任务 学校作业&#xff0c;我来水一水 环境&#xff1a;pycharmanaconda虚拟环境 文章目录 泰坦尼克号生存的预测任务0.环境搭建参考&#xff1a;1 目的与要求2 任务背景3 任务简介4 模型介绍1.决策树&#xff08;Decision Tree&#xff09;2.朴素贝叶斯…...

Tonghttpserver6.0.1.3 使用整理(by lqw)

文章目录 1.声明2.关于单机版控制台和集中管理控制台3.单机版控制台3.1安装&#xff0c;启动和查看授权信息3.2一些常见的使用问题&#xff08;单机控制台&#xff09;3.3之前使用的是nginx&#xff0c;现在要配nginx.conf上的配置&#xff0c;在THS上如何配置3.4如何配置密码过…...

图像坐标导数的表达式 Expression for Image Coordinate Derivate

Title: 图像坐标导数的表达式 Expression for Image Coordinate Derivate 文章目录 I. 图像坐标 Image CoordinatesII. 关于 x \mathbf{x} x 的导数 Derivative wrt x \mathbf{x} x1. 第一部分2. 第二部分3. 两部分合并 III. 关于 H H H 的导数 Derivative wrt H H H1. 第一…...

Jenkins 中自动化部署 Spring Boot 项目

&#x1f468;&#x1f3fb;‍&#x1f4bb; 热爱摄影的程序员 &#x1f468;&#x1f3fb;‍&#x1f3a8; 喜欢编码的设计师 &#x1f9d5;&#x1f3fb; 擅长设计的剪辑师 &#x1f9d1;&#x1f3fb;‍&#x1f3eb; 一位高冷无情的全栈工程师 欢迎分享 / 收藏 / 赞 / 在看…...

Live555、FFmpeg、GStreamer介绍

Live555、FFmpeg 和 GStreamer 都是处理流媒体和视频数据的强大开源框架和工具&#xff0c;它们广泛应用于实时视频流的推送、接收、处理和播放。每个框架有不同的设计理念、功能特性以及适用场景。下面将详细分析这三个框架的作用、解决的问题、适用场景、优缺点&#xff0c;并…...

西门子DBX DBD DBB DBW的关系

DB10.DBD0 DB10.DBW0DB10.DBW2 DB10.DBB0DB10.DBB1DB10.DBB2DB10.DBB3 DB10.DBX0.00.7DB10.DBX1.01.7DB10.DBX2.02.7DB10.DBX3.03.7 使用之前需要在DB10中先定义&#xff0c;如果你仅在DB10中定义了一个DBD0&#xff0c;那么原则上你是可以使用上述所有地址的&#xff0c;但…...

语言模型在时间序列预测中的作用

语言模型在时间序列预测中的作用 从目前相关的研究情况来看,大语言模型在时间序列预测中的作用存在争议。 质疑其有用性的方面 消融研究结果:在对一些流行的基于语言模型(LLM)的时间序列预测方法进行消融研究时发现,去除LLM组件或将其替换为基本注意力层,在大多数情况下…...

【centos8 镜像修改】centos8 镜像修改阿里云

要将 CentOS 8 的镜像源修改为阿里云镜像&#xff0c;你需要编辑 /etc/yum.repos.d/ 目录下的 .repo 文件。以下是具体的步骤&#xff1a; 备份原始的 .repo 文件&#xff1a; 在编辑之前&#xff0c;建议备份原始的 .repo 文件&#xff0c;以便在出现问题时可以恢复。 sudo cp…...

2024年12月个人工作生活总结

本文为 2024年12月工作生活总结。 研发编码 Golang语言byte数组赋值 假定有如下变量&#xff1a; var strCode string var bCode [9]byte现需将string类型转换成byte类型&#xff0c;如下&#xff1a; bCode []byte(strCode)无法转换&#xff0c;提示&#xff1a; cannot…...

[cg] android studio 无法调试cpp问题

折腾了好久&#xff0c;native cpp库无法调试问题&#xff0c;原因 下面的Deploy 需要选Apk from app bundle!! 另外就是指定Debug type为Dual&#xff0c;并在Symbol Directories 指定native cpp的so路径 UE项目调试&#xff1a; 使用Android Studio调试虚幻引擎Android项目…...

vulnhub靶场【warzone】之2

前言 靶机&#xff1a;warzone-1&#xff0c;IP地址192.168.1.71 攻击&#xff1a;kali&#xff0c;IP地址192.168.1.16 都采用虚拟机&#xff0c;网卡为桥接模式 主机发现 因为都是同一局域网下&#xff0c;相当于内网环境&#xff0c;所以使用下面的工具&#xff0c;若想…...

MySQL什么情况下会加间隙锁?

目录 一、使用范围条件查询 二、唯一索引的范围查询 三、普通索引的查询 四、间隙锁的锁定规则 五、间隙锁的影响 间隙锁(Gap Lock)是MySQL中的一种锁机制,主要用于防止幻读现象。在MySQL的InnoDB存储引擎中,当事务隔离级别设置为可重复读(Repeatable Read)时,间隙…...

REDIS2.0

string list hash set 无序集合 声明一个key&#xff0c;键里面的值是元素&#xff0c;元素的类型是string 元素的值是唯一的&#xff0c;不能重复 多个集合类型之间可以进行并集&#xff0c;交集&#xff0c;集查的运算 sadd test1 a b c c d &#xff1a;添加5个元素&am…...

Java方法使用详解:从基本概念到进阶技巧

1. 方法介绍 方法是执行特定功能的代码块&#xff0c;可以被多次调用。方法由方法头和方法体组成&#xff0c;方法头包括方法名、参数列表和返回类型。方法体包含实际执行的代码。 2. 无参无返回值方法使用 这种方法没有参数&#xff0c;也不返回任何值。常用于执行一些不需…...

RT-Thread中堆和栈怎么跟单片机内存相联系

现在RT-ThreadMCU的应用方式越来越普遍&#xff0c;RT-Thread需要配置MCU中的RAM到的系统中&#xff0c;进入系统内存管理&#xff0c;才能提供给基于实时系统的应用程序使用&#xff0c;比如给应用程序提供malloc、free等函数调用功能。在嵌入式软件开发中&#xff0c;我们经常…...

对jenkins的rpm进行处理

下载Jenkins RPM包 首先&#xff0c;你需要从Jenkins官方网站&#xff08;https://pkg.jenkins.io/redhat - stable/&#xff09;下载合适的RPM包。通常&#xff0c;对于CentOS等基于RPM的系统&#xff0c;可以选择jenkins - <version>.noarch.rpm这种格式的包&#xff0…...

从Huggingface中下载数据集、模型

报错&#xff1a; 可能原因&#xff1a; 1. 服务器网络连接 这样就显示没有问题 2.访问权限问题 3.连接超时 4.使用镜像 使用镜像的方法在autodl上是可以成功的&#xff0c;但是在一些服务器却不能成功&#xff0c;那么就需要我们下载到本地&#xff0c;然后再把本地的打包…...

设计模式的分类

根据概念性动机分3类设计模式 创建型模式&#xff1a;管理对象的创建。 常用的有单例模式&#xff0c;简单工厂模式&#xff0c;工厂方法模式&#xff0c;另外还有原型模式&#xff0c;抽象工厂模式&#xff0c;建造者模式 结构型模式&#xff1a;将已有对象加入到设计中时…...

【图像去噪】论文精读:DualDn: Dual-domain Denoising via Differentiable ISP

请先看【专栏介绍文章】:【图像去噪(Image Denoising)】关于【图像去噪】专栏的相关说明,包含适配人群、专栏简介、专栏亮点、阅读方法、定价理由、品质承诺、关于更新、去噪概述、文章目录、资料汇总、问题汇总(更新中) 文章目录 前言Abstract1 Introduction2 Related W…...

张量与数据类型

Pytorch最基本的操作对象——张量&#xff08;tensor&#xff09;&#xff0c;张量是Pytorch中重要的数据结构&#xff0c;可认为是一个高维数组。一般的&#xff0c;标量&#xff08;scalar&#xff09;是只有大小没有方向的量&#xff0c;如1、2、3等&#xff1b;向量&#x…...

JavaScript概述

Web网页的三要素&#xff1a;HTML结构、CSS表现、JavaScript行为。 一、JavaScript语言的组成 JS的全称叫JavaScript&#xff0c;它一门面向对象的解释型弱类型语言。 JavaScript也是由3个部分来组成的&#xff1a;ECMAScript、DOM、BOM。 ECMAScript——它是JS的核心部分&a…...

tarjan算法——割边

今天也是小小的学了一个tarjan算法中的割边的一个应用 他和割点很像&#xff0c;都是用来处理无向图的&#xff0c;只不过是不能走反向边罢了 我们首先来说一个割边的定义 割边 当我们在无向图中删除一个边&#xff0c;无向图被分成不联通的两部分&#xff0c;那么这条边就…...