Flow-matching |Stable diffusion3 ,Flux.1的理论基础

Flow-matching |Stable diffusion3 ,Flux.1的理论基础

前置知识:Flow NF

在AIGC领域,Flow、Normalizing Flow和Continuous Normalizing Flow均是重要的生成模型方法。

Flow

Flow流模型旨在通过学习复杂的概率分布来生成数据。其核心思想是通过一系列可逆变换将复杂分布映射到简单分布。这些变换的可逆性使得Flow模型在生成新样本和计算数据的对数似然时都非常高效。

在这里插入图片描述

这里的每一个G就是一个可逆变换,理论上只要我们可以精确的学习到每一个G,那么就能准确的估计出真实的分布,从而完成生成任务

Normalizing Flow

Normalizing Flow(规范化流)是一种具体的Flow模型,它通过一系列可逆且可微的变换将复杂数据分布映射到标准正态分布。其主要特点包括:

  1. 可逆性:每一步变换都是可逆的,这意味着可以从简单分布(如高斯分布)生成样本,并通过逆变换得到复杂分布的样本。
  2. 变化的可微性:每个变换都是可微的,这使得可以使用梯度下降等优化方法来训练模型。
  3. 链式法则:通过链式法则,可以有效地计算变换后的数据的对数似然。

Normalizing Flow的常见变种包括RealNVP和Glow等,它们在图像生成任务中表现优异。

CNF 和 Flow-matching

Continuous Normalizing Flow

Continuous Normalizing Flow(连续规范化流,CNF)是Normalizing Flow的连续版本。其核心思想是使用连续时间的微分方程来描述数据分布的变换。具体来说,CNF通过解常微分方程(ODE)来实现连续的概率密度变换。

为了描述CNF,我们首先要定义三个概念:

1)probability density path p : [ 0 , 1 ] × R d → R > 0 p:[0,1] \times R^d \rightarrow R_{>0} p:[0,1]×RdR>0,由于我们已经对时间t进行归一化处理,所以 t ∈ [ 0 , 1 ] t \in [0,1] t[0,1],每一个数据点为 R d R^d Rd,所以概率密度路径就是由无穷多个概率密度函数组成的,在t给定的时候 p t : R d → R > 0 p_t:R^d \rightarrow R_{>0} ptRdR>0就是一个概率分布。

2)time-dependent vector field v : [ 0 , 1 ] × R d → R d v : [0, 1] \times \mathbb{R}^d \rightarrow \mathbb{R}^d v:[0,1]×RdRd, v t v_t vt 就类似于上图中的G,通过对来自上一个分布的采样数据点x进行映射,形成新的概率分布

3)flow ϕ t \phi_t ϕt,给定t时,是一个流,用于将 p 0 p_0 p0直接映射到 p t p_t pt
p t = [ ϕ t ] ∗ p 0 p t ( x ) = [ ϕ t ] ∗ p 0 ( x ) = p 0 ( ϕ t − 1 ( x ) ) det ⁡ [ ∂ ϕ t − 1 ∂ x ] p_t = [\phi_t]_* p_0\\ p_t(x)=[\phi_t]_* p_0(x) = p_0(\phi_t^{-1}(x)) \det \left[ \frac{\partial \phi_t^{-1}}{\partial x} \right] pt=[ϕt]p0pt(x)=[ϕt]p0(x)=p0(ϕt1(x))det[xϕt1]
显然,向量场和流的关系是:
d d t ϕ t ( x ) = v t ( ϕ t ( x ) ) ϕ 0 ( x ) = x \frac{d}{dt} \phi_t(x) = v_t(\phi_t(x))\\ \phi_0(x) = x dtdϕt(x)=vt(ϕt(x))ϕ0(x)=x

Flow Matching

简单来说FM是一种通过拟合条件概率路径来高效训练CNF的框架和方法

我们令真实的分布为 q ( x ) q(x) q(x),我们设定 p 0 ( x ) p_0(x) p0(x)为一个简单的分布,比如像高斯分布,设定 p 1 ( x ) p_1(x) p1(x)是一个和 q ( x ) q(x) q(x)近乎等价的分布,我们构造一个这样的概率密度路径,并找到其对应的向量场 u t ( x ) u_t(x) ut(x),我们就可以得到损失函数
L FM ( θ ) = E t , p t ( x ) ∥ v t ( x ) − u t ( x ) ∥ 2 \mathcal{L}_{\text{FM}}(\theta) = \mathbb{E}_{t, p_t(x)} \|v_t(x) - u_t(x)\|^2 LFM(θ)=Et,pt(x)vt(x)ut(x)2
这里的 v t ( x ) v_t(x) vt(x)就是我们的模型输出

但是在实际中这很难被利用,因为符合条件的概率密度路径有很多,我们很难找到一个合适的,容易被计算机模拟和求解的,最重要的是,我们基本上得不到对应于 p t p_t pt u t u_t ut的闭式解

于是作者进行了改进,不去直接讨论 p t p_t pt u t u_t ut,而是针对每一个特定的样本,去讨论基于给定样本的条件概率路径 p t ( x ∣ x 1 ) p_t(x|x_1) pt(xx1)和条件向量场 u t ( x ∣ x 1 ) u_t(x|x_1) ut(xx1),以这个为中介,最终得到与 u t u_t ut拟合的很好的 v t v_t vt

通过条件概率路径和向量场来构建目标概率路径以及相应的优化目标

作者提出了一种通过混合条件概率路径来构建目标概率路径的方法:

  1. 条件概率路径 p t ( x ∣ x 1 ) p_t(x|x_1) pt(xx1):

    • 给定一个数据样本 x 1 x_1 x1,定义条件概率路径 p t ( x ∣ x 1 ) p_t(x|x_1) pt(xx1)
    • 在时间 t = 0 t=0 t=0 时, p 0 ( x ∣ x 1 ) = p ( x ) p_0(x|x_1) = p(x) p0(xx1)=p(x),与 x 1 x_1 x1无关,使得 p 0 ( x ) p_0(x) p0(x)为一个独立于 q ( x ) q(x) q(x)的分布
    • 在时间 t = 1 t=1 t=1 时, p 1 ( x ∣ x 1 ) p_1(x|x_1) p1(xx1) 是一个集中在 x = x 1 x=x_1 x=x1 附近的分布,使得 p 1 ( x ) p_1(x) p1(x)很好的近似 q ( x ) q(x) q(x)
  2. 边际概率路径 p t ( x ) p_t(x) pt(x):

    • 通过对条件概率路径进行边际化得到边际概率路径:
      p t ( x ) = ∫ p t ( x ∣ x 1 ) q ( x 1 ) d x 1 p_t(x) = \int p_t(x|x_1) q(x_1) dx_1 pt(x)=pt(xx1)q(x1)dx1

    • 构造合适的 p 1 ( x ∣ x 1 ) p_1(x|x_1) p1(xx1),使得在时间 t = 1 t=1 t=1 时,边际概率 p 1 ( x ) p_1(x) p1(x) 可以很好地近似数据分布 q q q
      p 1 ( x ) = ∫ p 1 ( x ∣ x 1 ) q ( x 1 ) d x 1 ≈ q ( x ) p_1(x) = \int p_1(x|x_1) q(x_1) dx_1 \approx q(x) p1(x)=p1(xx1)q(x1)dx1q(x)

  3. 边际向量场 u t ( x ) u_t(x) ut(x):

    • 通过对条件向量场进行边际化定义边际向量场:
      u t ( x ) = ∫ u t ( x ∣ x 1 ) p t ( x ∣ x 1 ) q ( x 1 ) p t ( x ) d x 1 u_t(x) = \int \frac{u_t(x|x_1) p_t(x|x_1) q(x_1)}{p_t(x)} dx_1 ut(x)=pt(x)ut(xx1)pt(xx1)q(x1)dx1

    • 条件向量场 u t ( ⋅ ∣ x 1 ) u_t(\cdot|x_1) ut(x1) 生成条件概率路径 p t ( ⋅ ∣ x 1 ) p_t(\cdot|x_1) pt(x1)

  4. 定理 1:

    • 给定生成条件概率路径 p t ( x ∣ x 1 ) p_t(x|x_1) pt(xx1) 的向量场 u t ( x ∣ x 1 ) u_t(x|x_1) ut(xx1),对于任意分布 q ( x 1 ) q(x_1) q(x1),定义的边际向量场 u t u_t ut 会生成定义的边际概率路径 p t p_t pt

这就意味着,我们可以用条件向量场聚合成真正的边际向量场,并得到边际概率密度路径。将问题转化为拟合简单的条件向量场。

但是即便我们得到了条件向量场,由于(6)式子定义中包含了 q ( x 1 ) q(x_1) q(x1),所以还是不能得到 u t ( x ) u_t(x) ut(x),于是作者定义了一个更简单的目标函数
L CFM ( θ ) = E t , q ( x 1 ) , p t ( x ∣ x 1 ) [ ∥ v t ( x ) − u t ( x ∣ x 1 ) ∥ 2 ] L_{\text{CFM}}(\theta) = \mathbb{E}_{t, q(x_1), p_t(x|x_1)} \left[ \left\| v_t(x) - u_t(x|x_1) \right\|^2 \right] LCFM(θ)=Et,q(x1),pt(xx1)[vt(x)ut(xx1)2]
这个目标可以通过有效采样 p t ( x ∣ x 1 ) p_t(x|x_1) pt(xx1) 和计算 u t ( x ∣ x 1 ) u_t(x|x_1) ut(xx1) 来实现,当给定样本时,这两项的获得都会变得很容易,后文中会继续探讨。作者通过证明定理2,说明了优化(7)就等价于优化(3),这个论证是十分关键的

定理 2: 假设 p t ( x ) > 0 p_t(x) > 0 pt(x)>0 对所有 x ∈ R d x \in \mathbb{R}^d xRd t ∈ [ 0 , 1 ] t \in [0, 1] t[0,1] 成立,则 L CFM L_{\text{CFM}} LCFM L FM L_{\text{FM}} LFM 除了一个与参数 θ \theta θ 无关的常数外是相等的,即 ∇ θ L FM ( θ ) = ∇ θ L CFM ( θ ) \nabla_\theta L_{\text{FM}}(\theta) = \nabla_\theta L_{\text{CFM}}(\theta) θLFM(θ)=θLCFM(θ)

自此,我们需要找这样一个条件概率路径(假设 x 1 x_1 x1是给定的一个样本点)

  • p 0 ( x ∣ x 1 ) p_0(x|x_1) p0(xx1) x 1 x_1 x1无关,且接近于一个简单分布
  • p 1 ( x ∣ x 1 ) p_1(x|x_1) p1(xx1) 是一个集中在 x = x 1 x=x_1 x=x1 附近的分布
  • 这个条件概率路径对应的条件向量场是可求的

高斯条件概率路径

高斯条件概率路径就是一个符合上述要求的路径:
p t ( x ∣ x 1 ) = N ( x ∣ μ t ( x 1 ) , σ t ( x 1 ) 2 I ) p_t(x|x_1) = \mathcal{N}(x | \mu_t(x_1), \sigma_t(x_1)^2 I) pt(xx1)=N(xμt(x1),σt(x1)2I)
其中 μ 0 ( x 1 ) = 0 \mu_0(x_1) = 0 μ0(x1)=0 σ 0 ( x 1 ) = 1 \sigma_0(x_1) = 1 σ0(x1)=1 μ 1 ( x 1 ) = x 1 \mu_1(x_1) = x_1 μ1(x1)=x1 σ 1 ( x 1 ) = σ min ⁡ \sigma_1(x_1) = \sigma_{\min} σ1(x1)=σmin

对应的一个流就是
ϕ t ( x ) = σ t ( x 1 ) x + μ t ( x 1 ) \phi_t(x) = \sigma_t(x_1)x + \mu_t(x_1) ϕt(x)=σt(x1)x+μt(x1)
其中x服从标准高斯分布

根据公式 d d t ψ t ( x ) = u t ( ψ t ( x ) ∣ x 1 ) \frac{d}{dt} \psi_t(x) = u_t(\psi_t(x)|x_1) dtdψt(x)=ut(ψt(x)x1),可以求得
u t ( x ∣ x 1 ) = σ t ′ ( x 1 ) σ t ( x 1 ) ( x − μ t ( x 1 ) ) + μ t ′ ( x 1 ) u_t(x|x_1) = \frac{\sigma'_t(x_1)}{\sigma_t(x_1)} (x - \mu_t(x_1)) + \mu'_t(x_1) ut(xx1)=σt(x1)σt(x1)(xμt(x1))+μt(x1)
可以看出,这个条件向量场是可求的,那么我们就能通过优化公式(7)来达到训练目标

Diffusion

在这一小节,作者用flow-matching的思想统一了之前的score-matching和 DDPM

score-matching

原始score-matching的做法是给原始数据上加不同程度的噪声,采样阶段按照噪声强度从大到小的顺序进行采样,不同程度的噪声对应着不同的概率分布,这些概率分布共同构成了概率密度路径,将这些概率分布连续化就得到了
p t ( x ) = N ( x ∣ x 1 , σ 1 − t 2 I ) w h e r e   σ t   i s   a n   i n c r e a s i n g   f u n c t i o n   , σ 0 = 0   a n d   σ 1 > > 1 p_t(x) = \mathcal{N}(x|x_1, \sigma_{1-t}^2 I)\\ where \ \sigma_t\ is\ an\ increasing\ function\ ,\sigma_0=0\ and\ \sigma_1>>1 pt(x)=N(xx1,σ1t2I)where σt is an increasing function ,σ0=0 and σ1>>1
所以 μ t ( x 1 ) = x 1 , σ t ( x 1 ) = σ 1 − t \mu_t(x_1)=x_1,\sigma_t(x_1)=\sigma_{1-t} μt(x1)=x1,σt(x1)=σ1t,与之对应的
u t ( x ∣ x 1 ) = − σ 1 − t ′ σ 1 − t ( x − x 1 ) u_t(x|x_1) = -\frac{\sigma'_{1-t}}{\sigma_{1-t}}(x - x_1) ut(xx1)=σ1tσ1t(xx1)

DDPM

原始DDPM的加噪公式为 q ( x t ∣ x 0 ) = N ( x t ; α ˉ t x 0 , ( 1 − α ˉ t ) I ) q(x_t | x_0) = \mathcal{N} \left( x_t; \sqrt{\bar{\alpha}_t} x_0, (1 - \bar{\alpha}_t) I \right) q(xtx0)=N(xt;αˉt x0,(1αˉt)I),将其连续化后得到如下公式
p t ( x ∣ x 1 ) = N ( x ∣ α 1 − t x 1 , ( 1 − α 1 − t 2 ) I ) w h e r e   α t = e − 1 2 T ( t ) , T ( t ) = ∫ 0 t β ( s ) d s p_t(x|x_1) = \mathcal{N}(x|\alpha_{1-t} x_1, (1 - \alpha_{1-t}^2) I)\\ where\ \alpha_t = e^{-\frac{1}{2} T(t)}, T(t) = \int_0^t \beta(s) ds pt(xx1)=N(xα1tx1,(1α1t2)I)where αt=e21T(t),T(t)=0tβ(s)ds
所以 μ t ( x 1 ) = α 1 − t x 1   a n d   σ t ( x 1 ) = 1 − α 1 − t 2 \mu_t(x_1) = \alpha_{1-t} x_1\ and \ \sigma_t(x_1) = \sqrt{1 - \alpha_{1-t}^2} μt(x1)=α1tx1 and σt(x1)=1α1t2 ,与之对应的条件向量场即为
u t ( x ∣ x 1 ) = α 1 − t ′ 1 − α 1 − t 2 ( α 1 − t x − x 1 ) = − T ′ ( 1 − t ) 2 [ e − T ( 1 − t ) x − e − 1 2 T ( 1 − t ) x 1 1 − e − T ( 1 − t ) ] u_t(x|x_1) = \frac{\alpha'_{1-t}}{1 - \alpha_{1-t}^2} (\alpha_{1-t} x - x_1) = -\frac{T'(1-t)}{2} \left[ \frac{e^{-T(1-t)} x - e^{-\frac{1}{2} T(1-t)} x_1}{1 - e^{-T(1-t)}} \right] ut(xx1)=1α1t2α1t(α1txx1)=2T(1t)[1eT(1t)eT(1t)xe21T(1t)x1]
用Flow Matching的重述DDPM和score-matching,不仅可以提供一个全新的视角,更重要的是也会使得模型训练变得更稳定

Optimal Transport

既然符合条件的概率密度路径有无穷多个,那么对于其最自然的选择就是使均值和方差随时间线性变化
μ t ( x ) = t x 1 , σ t ( x ) = 1 − ( 1 − σ min ⁡ ) t \mu_t(x) = t x_1, \quad \sigma_t(x) = 1 - (1 - \sigma_{\min}) t μt(x)=tx1,σt(x)=1(1σmin)t
其对应的条件向量场和流分别是
u t ( x ∣ x 1 ) = x 1 − ( 1 − σ min ⁡ ) x 1 − ( 1 − σ min ⁡ ) t u_t(x|x_1) = \frac{x_1 - (1 - \sigma_{\min}) x}{1 - (1 - \sigma_{\min}) t} ut(xx1)=1(1σmin)tx1(1σmin)x

ψ t ( x ) = ( 1 − ( 1 − σ min ⁡ ) t ) x + t x 1 \psi_t(x) = (1 - (1 - \sigma_{\min}) t) x + t x_1 ψt(x)=(1(1σmin)t)x+tx1

事实上,这样的条件流实际上是两个高斯分布 p 0 ( x ∣ x 1 ) p_0(x∣x1) p0(xx1) p 1 ( x ∣ x 1 ) p_1(x∣x1) p1(xx1)之间的最优传输的位移映射(Optimal Transport displacement map)

目标函数此时就成为
L CFM ( θ ) = E t , q ( x 1 ) , p ( x 0 ) ∥ v t ( ψ t ( x 0 ) ) − ( x 1 − ( 1 − σ min ⁡ ) x 0 ) ∥ 2 L_{\text{CFM}} (\theta) = \mathbb{E}_{t, q(x_1), p(x_0)} \left\| v_t(\psi_t(x_0)) - \left( {x_1 - (1 - \sigma_{\min}) x_0} \right) \right\|^2 LCFM(θ)=Et,q(x1),p(x0)vt(ψt(x0))(x1(1σmin)x0)2
最开始看到这个公式很震惊很疑惑🤔,因为当 σ m i n \sigma_{min} σmin最够小的时候,拟合目标等价为 x 1 − x 0 x_1-x_0 x1x0,这不就是噪声 ϵ \epsilon ϵ吗,兜兜转转又回到了最初的DDPM?细想下来还是有区别的,DDPM中拟合的是真实图片分布和众多真实分布加噪声之后形成的概率分布之间的噪声,Optimal Transport似乎暴力,只去考虑了真实图片分布和标准高斯分布之间的噪声。但是作者的实验最终证明了这反倒可以使模型获得更好的性能。

模型训练完成之后,就可以从一个标准高斯分布中采样,然后一步步调用 v t ( x ) v_t(x) vt(x)来生成图片,显然,当条件样本 x 1 x_1 x1固定时,OT的向量场是直的,DDPM的向量场是弯曲的,这也从侧面应证了在DDPM中强行跳步会导致图片质量下降严重

OT的设计方向是,在给定样本点时,向量场是直的,但是在模型训练中,不可能只针对单个点进行拟合,那么众多样本点的条件向量场肯定会有重叠,模型在重叠部分中的拟合结果会变得杂乱无章,所以最终采样时走的路径也不是标准的直线,那么能否有办法,在条件向量场是直的的情况下,使得最终的 v t ( x ) v_t(x) vt(x)也能始终保持是直的呢

Rectified Flow

Rectified Flow是Flow Matching基础上的一种改进,Flow Matching是设计点源场为直线,而Rectified Flow则是让最后的叠加场为直线,从而使最终采样时走直线,因此最后形式上更加简单,也因为采样是走直线,所以可以一步生成

为了说明rectified flow的原理,我们考虑最简单的情况,假设我们的学习任务是将蓝色表示的概率分布映射到红色表示的概率分布,那么如果用只用OT进行训练,那么在中间地带的向量场就会紊乱(左图),rectified flow的工作就是通过重新配对训练样本点的方式,在原训练的基础上再次训练,获得右图的向量场

在这里插入图片描述

如果想进一步探究Rectified Flow的技术细节的话,可以查看RF的官方推文

<think>好的,我现在需要帮助用户解决安装PyTorch时遇到的版本不匹配问题,具体是安装torch==2.1.2时出现“No matching distribution found”的错误。首先,我应该回忆一下用户提供的引用内容,看看有没有相关的解决方法。 用户提供的引用中有三个例子:引用[1]提到使用镜像源安装torch,但可能因为镜像源没有对应的版本导致失败;引用[2]解决了特定版本的torch安装问题,通过指定下载URL和镜像源;引用[3]则是处理torch相关库的安装问题,可能需要特定的版本匹配。 首先,我需要考虑用户遇到的问题可能的原因。常见的导致这个错误的原因包括:Python版本不兼容、CUDA版本不支持、操作系统或平台不匹配,或者指定的版本确实不存在。用户想安装的是torch==2.1.2,我需要先确认PyTorch官方是否发布了这个版本,以及支持的Python版本和CUDA版本。 根据PyTorch官方网站,torch 2.1.2应该存在,但可能用户的环境不符合要求。例如,用户可能使用的Python版本过旧或者过新,或者CUDA版本不匹配。此外,用户可能使用的镜像源没有及时更新,导致无法找到该版本。 接下来,我应该建议用户检查他们的Python版本。PyTorch 2.1.2可能需要Python 3.8或更高版本。如果用户使用的是Python 3.7或更早版本,可能无法找到对应的torch版本。用户可以通过运行python --version或python3 --version来确认。 然后,CUDA版本也是一个关键因素。如果用户安装了CUDA,需要确保PyTorch版本与CUDA版本兼容。例如,PyTorch 2.1.2可能支持CUDA 11.8或12.1,如果用户的CUDA是10.2,可能无法找到对应的版本。用户可以通过nvidia-smi或nvcc --version来查看CUDA版本。 如果用户的Python和CUDA版本都符合要求,但仍然无法安装,可能需要更换镜像源或者直接使用PyTorch官方提供的下载链接。例如,使用官方的--find-links参数指定PyTorch的whl文件位置,并结合镜像源加速下载。 另外,用户可能需要使用--user选项或者虚拟环境来安装,避免权限问题。同时,确保pip版本是最新的,旧版pip可能无法正确解析某些依赖或版本。 如果以上方法都不奏效,建议用户访问PyTorch官方网站,查看可用的版本和对应的安装命令,确认torch==2.1.2是否存在,并获取正确的安装指令。 总结可能的解决步骤: 1. 检查Python版本是否符合要求。 2. 检查CUDA版本是否兼容。 3. 使用PyTorch官方推荐的安装命令,指定正确的CUDA版本。 4. 更换镜像源或直接使用官方源。 5. 更新pip工具到最新版本。 6. 使用--find-links参数指定下载路径。 7. 创建虚拟环境避免冲突。 最后,根据引用中的例子,用户可能需要组合多种方法,比如指定镜像源的同时使用官方下载链接,或者在安装命令中添加信任主机参数。</think>### 解决安装`torch==2.1.2`时版本不匹配问题的方法 #### 1. **检查Python版本兼容性** - **PyTorch 2.1.2**要求Python版本≥3.8。若使用Python≤3.7,需升级Python: ```bash python --version # 查看当前版本 ``` 若版本过低,可通过`conda`或`pyenv`升级Python。 #### 2. **验证CUDA驱动兼容性** - **PyTorch 2.1.2**支持CUDA 11.8和12.1。通过以下命令检查CUDA版本: ```bash nvidia-smi # 查看驱动支持的最高CUDA版本 ``` 若CUDA版本不匹配,需升级驱动或选择兼容的PyTorch版本[^2]。 #### 3. **使用PyTorch官方安装命令** - 根据CUDA版本选择安装命令(以CUDA 11.8为例): ```bash pip install torch==2.1.2 torchvision==0.16.2 torchaudio==2.1.2 --index-url https://download.pytorch.org/whl/cu118 ``` 若未安装CUDA,使用CPU版本: ```bash pip install torch==2.1.2+cpu --index-url https://download.pytorch.org/whl/cpu ``` #### 4. **更换镜像源并指定下载路径** - 若镜像源未同步最新版本,可添加`-f`参数强制从PyTorch官方源下载: ```bash pip install torch==2.1.2 -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn -f https://download.pytorch.org/whl/torch_stable.html ``` #### 5. **更新pip工具** - 旧版pip可能无法解析复杂依赖: ```bash pip install --upgrade pip ``` #### 6. **使用虚拟环境隔离依赖** - 创建干净的虚拟环境以避免冲突: ```bash python -m venv torch_env source torch_env/bin/activate # Linux/macOS torch_env\Scripts\activate # Windows ``` 在虚拟环境中执行上述安装命令。 #### 7. **验证安装结果** - 运行Python检查是否安装成功: ```python import torch print(torch.__version__) # 应输出2.1.2 print(torch.cuda.is_available()) # 若使用GPU版本,返回True[^2] ``` ### 示例安装命令 ```bash # 针对CUDA 11.8的安装命令 pip install torch==2.1.2 torchvision==0.16.2 torchaudio==2.1.2 --index-url https://download.pytorch.org/whl/cu118 -i https://pypi.douban.com/simple --trusted-host pypi.douban.com ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值