设为首页收藏本站

爱吱声

 找回密码
 注册
搜索
查看: 3332|回复: 26
打印 上一主题 下一主题

[信息技术] DeepSeek用PTX编程,隐忧乎?无忧乎?

[复制链接]

该用户从未签到

跳转到指定楼层
楼主
 楼主| 发表于 2025-2-2 22:14:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
DeepSeek用英伟达H20卡训练V3和R1大模型,但据说没有用英伟达的CUDA语言,而是用了更加底层的PTX。
7 U/ f4 V; N, E# G3 \0 _
0 C7 T2 I/ L. A  m1 M1 ~3 kCUDA是英伟达的护城河。搞人工智能就要用英伟达的图形卡,跑英伟达的卡就需要CUDA。一旦形成生态就反过来了,搞人工智能就用CUDA写软件,跑CUDA就只有用英伟达的卡。% g* Y* w. w- ^3 h4 Z7 V

  s, v( `+ m& `! s但DeepSeek用接近汇编语言的PTX编写软件,绕过了CUDA护城河,也因为PTX更加接近机器语言而更快。据说这是DeepSeek里老人马当年搞量化交易的“后遗症”,需要计算机和通信上达到极限性能,只有用接近汇编语言的“低级语言”来编写程序,比如PTX。* X' N- v8 |5 U6 V! Y& C4 S0 F

( g2 ?& M% A8 Z! B汇编接近机器指令,速度快,但远离自然语言,语句功能专一、琐碎,编写麻烦,可移植性很差,换一个GPU就需要重写。高级语言的发明就是为了解决接近自然语言和软件在不同平台之间的可移植性的问题的,但执行效率不及汇编。: V) m1 E4 m  ^) ^

$ M+ @/ V/ T5 x3 N9 Q接近自然语言很重要,这样更人类思维,编程和阅读容易,纠错也容易。跨计算机平台的可移植性也很重要,不仅更新更快的芯片出来了,重新编译一下又可以执行,换上完全“不同路子”的计算机也能执行,比如WinTel换到Unix或者iOS环境下。但编译出来的执行时效率不及汇编。2 p2 u7 w, @8 D% H; [
2 e4 ^+ j3 h- T8 J& {2 I5 J
DeepSeek绕过了CUDA,但通用大模型要是“绑定”在H20卡上,那就亏了,换卡就要重新编写和测试一遍。; F3 x+ q6 b4 K. y  A
: E$ m- H! I+ c6 c
好在大模型的一大神迹就是按照自然语言的要求写程序。换到这里,只是直接写到PTX一级。这个问题解决了,可移植性比CUDA还好,直接用更加接近自然语言的伪码了。9 F0 _3 K0 F% S. j+ [$ a

; E% y1 ^  l8 w& G# ]% w; W即使以后不用PTX了,也就是重新训练大模型改用新语言的事。换句话说,大模型代替高级语言的工作了。6 {( A" B5 K. v# Y* S" V( ~

# K8 D* J# o+ L+ Y2 y) Z看来,没有隐忧。+ L) k. R8 _& H- Z! `

评分

参与人数 4爱元 +22 收起 理由
四处乱晃 + 4 涨姿势
唐家山 + 4
pcb + 4
长叶林 + 10 就看懂了最后一句

查看全部评分

本帖被以下淘专辑推荐:

该用户从未签到

沙发
发表于 2025-2-4 01:15:04 | 只看该作者
应该是用的H800,不是H20
回复 支持 反对

使用道具 举报

该用户从未签到

板凳
 楼主| 发表于 2025-2-4 01:35:04 | 只看该作者
WiFi 发表于 2025-2-3 11:15( i& \3 f3 M+ v( N. f! U
应该是用的H800,不是H20
( {5 s/ e% k6 I2 p
两个说法都看到过,我都糊涂了。哪一个更弱?
回复 支持 反对

使用道具 举报

该用户从未签到

地板
发表于 2025-2-4 02:57:19 | 只看该作者
晨枫 发表于 2025-2-4 01:35
9 R6 U9 u" H. ~' E两个说法都看到过,我都糊涂了。哪一个更弱?

% R+ h# J) P3 INvidia's H800 was launched in March 2023 and is a cut-down version of the H100.  {* B6 C" U; a+ i; E
The H20 is expected to be available for important clients in early 2024, with a wider release in the second quarter
3 ^1 C1 Z! O, r' K" w! X" E5 x6 \; a6 M" R
H20比H800新一代。应该更好一些。
回复 支持 反对

使用道具 举报

  • TA的每日心情
    开心
    2020-4-8 10:45
  • 签到天数: 227 天

    [LV.7]分神

    5#
    发表于 2025-2-5 13:58:20 | 只看该作者
    相比于绕开cuda的突破,其实ds自己设计的Fire-Flyer AI-HPC框架,更值得自豪。
    . c0 T9 V$ ]7 T: f: X, I
    3 K6 l" D7 |7 X6 ~1 r! p$ x/ L! m5 ^在训练的尝试中有意绕开了多卡之间必须依赖的nvlink的瓶颈,而这个其实是老黄在硬件底层的护城河,更深也更黑。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    6#
     楼主| 发表于 2025-2-5 14:13:46 | 只看该作者
    xiejin77 发表于 2025-2-4 23:58
    / d& l: g' n' ?+ ?1 `& }相比于绕开cuda的突破,其实ds自己设计的Fire-Flyer AI-HPC框架,更值得自豪。
    ! P/ I0 U2 q# x: B3 z1 t% m' A4 j6 q( k  n
    在训练的尝试中有意绕开了 ...
    % }& X% C' H4 ]( l0 s
    这个能展开说说吗?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2020-4-8 10:45
  • 签到天数: 227 天

    [LV.7]分神

    7#
    发表于 2025-2-5 14:21:24 | 只看该作者
    晨枫 发表于 2025-2-5 14:13
    # t4 g" R% t! z2 p+ V+ }这个能展开说说吗?

    2 @4 r: B" \' ]3 v- b7 @% Fds自己有篇论文,我找时间专门解读一下吧
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    8#
     楼主| 发表于 2025-2-5 14:30:59 | 只看该作者
    xiejin77 发表于 2025-2-5 00:21
    4 L; G% _) h: }) f) F4 b$ tds自己有篇论文,我找时间专门解读一下吧

    0 X2 ~$ _, S- J1 \7 o' L多谢。恭候。/ X9 A! r2 z, ~* G; Z2 ~$ A
    5 ?7 u) {4 D% s
    DS倒是真开放哈。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2020-4-8 10:45
  • 签到天数: 227 天

    [LV.7]分神

    9#
    发表于 2025-2-5 15:08:10 | 只看该作者
    WiFi 发表于 2025-2-4 01:15
    7 ]6 C/ r1 B- W5 r* T, @应该是用的H800,不是H20

    1 ]2 p- N' b; n- @" p- Q8 e3 q% A- ~晨大的这个说法,我查了一下资料和信源,正好我之前写过ds-v3的解读。感觉可能是有点偏差。
    ! Q! X, V* r/ n+ o' O% j
    4 E- J' _* S# g2 @: q. m! B/ WParallel thread execution就是PTX。这是一种底层的N卡指令集架构的中间语言,cuda也用ptx,在这一点上确实是类似asm。. w, \* u( Y6 y0 e" K% k! b- y5 Y
    8 L/ w8 P3 @- T$ k8 F# f* d3 @  f
    但根据ds自己的论文看,他们用ptx不是为了绕过cuda,而是为了优化效率:5 I" z: L0 U, Z
    In detail, we employ the warp specialization technique (Bauer et al., 2014) and partition% T3 Y* K7 p5 c0 _  U
    20 SMs into 10 communication channels. During the dispatching process, (1) IB sending, (2)
    * y  P/ O. d+ B7 z% gIB-to-NVLink forwarding, and (3) NVLink receiving are handled by respective warps. The
    * k2 g' e2 K; u7 Znumber of warps allocated to each communication task is dynamically adjusted according to the
    9 y# G" F& I, mactual workload across all SMs. Similarly, during the combining process, (1) NVLink sending,* x( R: l2 C! I) z. w
    (2) NVLink-to-IB forwarding and accumulation, and (3) IB receiving and accumulation are also, ?4 G6 X7 B3 n9 u
    handled by dynamically adjusted warps. In addition, both dispatching and combining kernels+ |" o$ z( a! _& y8 T9 }: c
    overlap with the computation stream, so we also consider their impact on other SM computation) X+ Q. N% k1 ]' s: r7 V
    kernels. Specifically, we employ customized PTX (Parallel Thread Execution) instructions and$ e' f; v3 H$ c& e6 ~6 M, ?
    auto-tune the communication chunk size, which significantly reduces the use of the L2 cache. f  t  ?1 K3 k
    and the interference to other SMs
    .
    4 d- P+ {! y. Q/ U! q
    5 J) o; w& x+ X; U6 t7 [
    理论上说基于ptx的话,N卡可用,华为的910c是不能用的。所以不存在通用性的可能,更像是ds的团队逢山开路遇水架桥的给cuda打补丁。. i2 z% a/ [/ v2 r7 B

    评分

    参与人数 2爱元 +14 收起 理由
    黑洞的颜色 + 10
    唐家山 + 4

    查看全部评分

    回复 支持 反对

    使用道具 举报

    该用户从未签到

    10#
    发表于 2025-2-6 01:33:23 | 只看该作者
    xiejin77 发表于 2025-2-5 15:08. h7 U" M6 i0 {
    晨大的这个说法,我查了一下资料和信源,正好我之前写过ds-v3的解读。感觉可能是有点偏差。
    8 w' M+ l5 Y+ R$ q/ L6 p, m% C( U1 e+ z- v9 |
    Parallel th ...
    5 w) ?3 m6 L9 [
    同意谢总的分析
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    11#
     楼主| 发表于 2025-2-6 02:13:14 | 只看该作者
    xiejin77 发表于 2025-2-5 01:08, I; v2 m/ _4 Q" v
    晨大的这个说法,我查了一下资料和信源,正好我之前写过ds-v3的解读。感觉可能是有点偏差。& E' g) p5 Y/ o: D1 r
    5 y! \$ i2 }  ~' @
    Parallel th ...

    4 a& N8 i, C: K9 U* d- L# qPTX是不是本来就chip specific?有可能利用大模型反过来把PTX写的东西反过来生成伪码,再针对新芯片的相当于PTX的指令集生成新的软件?这可能丧失了直接用PTX的优化作用,但重获了CUDA的可移植性?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2020-4-8 10:45
  • 签到天数: 227 天

    [LV.7]分神

    12#
    发表于 2025-2-6 08:42:21 | 只看该作者
    晨枫 发表于 2025-2-6 02:134 R+ z8 z1 t% y1 Y2 A
    PTX是不是本来就chip specific?有可能利用大模型反过来把PTX写的东西反过来生成伪码,再针对新芯片的相 ...

    / r- j  h. A1 F& [# q晨大好。. Y7 I' K1 ]  n7 U
    9 D% q9 L; s" S+ p. K5 b; y
    我的理解,类asm的语言都是和硬件架构和芯片的指令集深度绑定的。
    4 D1 X, @7 o+ {+ X' D  j1 f# r; U) z9 F
    您这思路,理论上可行,但是就像用谷歌翻译来回古文一样,偏差会大到不忍卒读。
    ' `8 j- Y' @- @9 S0 c, h1 L. Y2 W, K. x0 v% C0 j$ {
    其实ds并没有想绕开cuda,他的V3版本都是在N卡的体系里做的。2 P/ A7 }+ p9 `8 J, A8 Q# T5 ~

      A  n* P9 q3 a4 ~0 u, Z2 E8 `要知道,老黄的护城河可不仅仅是cuda生态和ptx,nvlink和IB网络框架才是最底层的壁垒。顺便说一句,DS嫌nvlink的故障率太多,边用边吐槽,还整了一套新架构出来。不过多机多卡的大集群,IB网络近期很有可能是绕不开的,最多就是减少带宽消耗而已。

    评分

    参与人数 3爱元 +24 收起 理由
    黑洞的颜色 + 10
    雷达 + 10 谢谢分享
    唐家山 + 4

    查看全部评分

    回复 支持 反对

    使用道具 举报

    该用户从未签到

    13#
     楼主| 发表于 2025-2-6 08:50:00 | 只看该作者
    xiejin77 发表于 2025-2-5 18:42
    ; n0 W3 l4 K* @" O; p晨大好。
    ' Y7 z# M5 E9 N+ v; X, s8 J* P6 u6 C, b5 l- K, [
    我的理解,类asm的语言都是和硬件架构和芯片的指令集深度绑定的。
    , P( @+ H6 x; J6 g/ F' v
    多谢解释。那DS为什么不直接用CUDA,还要费事用PTX呢?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2020-4-8 10:45
  • 签到天数: 227 天

    [LV.7]分神

    14#
    发表于 2025-2-6 09:14:45 | 只看该作者
    晨枫 发表于 2025-2-6 08:50
    ( l  C1 t. r, O" x- ~! D9 E8 {多谢解释。那DS为什么不直接用CUDA,还要费事用PTX呢?

    & Z$ b  h7 `7 ]" z& q2 O3 K在论文里,这是第3.2.2节的内容8 K& y/ x: F/ N9 h6 t
    * h, e) m  V2 u. V
    3.2.2. Efficient Implementation of Cross-Node All-to-All Communication) I# U$ g" k7 v% R
    In order to ensure sufficient computational performance for DualPipe, we customize efficient5 x( I: I2 ^& l1 c
    cross-node all-to-all communication kernels (including dispatching and combining) to conserve# o# N1 l- Z" K& X8 M& O* {
    the number of SMs dedicated to communication. The implementation of the kernels is co￾designed with the MoE gating algorithm and the network topology of our cluster. To be specific,; p9 c8 u. a# U9 S& d
    in our cluster, cross-node GPUs are fully interconnected with IB, and intra-node communications7 I. o6 e  V  B; f/ K+ h5 ], w, ^
    are handled via NVLink. NVLink offers a bandwidth of 160 GB/s, roughly 3.2 times that of IB& y; ~+ a) u6 t- E
    (50 GB/s). To effectively leverage the different bandwidths of IB and NVLink, we limit each% U2 n! I% ]0 ^% @/ u
    token to be dispatched to at most 4 nodes, thereby reducing IB traffic. For each token, when its
      F' b+ s9 L( }routing decision is made, it will first be transmitted via IB to the GPUs with the same in-node( d$ s9 a3 y" @) k: O  |
    index on its target nodes. Once it reaches the target nodes, we will endeavor to ensure that it is
    5 o- `7 V# n1 U2 F; p1 ~instantaneously forwarded via NVLink to specific GPUs that host their target experts, without5 K& k* \" u) G
    being blocked by subsequently arriving tokens. In this way, communications via IB and NVLink
    6 {* m9 Z" y+ mare fully overlapped, and each token can efficiently select an average of 3.2 experts per node- P. D) h2 \# Z& {
    without incurring additional overhead from NVLink. This implies that, although DeepSeek-V3  s; [% ]# E  p, ?, N  C" \$ f
    13& Q9 \0 j! M' U7 u6 k
    selects only 8 routed experts in practice, it can scale up this number to a maximum of 13 experts
    4 A2 [2 v1 t2 O) `(4 nodes × 3.2 experts/node) while preserving the same communication cost. Overall, under
    8 `4 Q/ V+ x& H) Zsuch a communication strategy, only 20 SMs are sufficient to fully utilize the bandwidths of IB
    / `* e3 z) o/ q! T) n& fand NVLink.1 O; t1 U9 e: b
    In detail, we employ the warp specialization technique (Bauer et al., 2014) and partition% w$ v& g% \' @) \2 n
    20 SMs into 10 communication channels. During the dispatching process, (1) IB sending, (2)
      G2 i# U! t3 ]5 gIB-to-NVLink forwarding, and (3) NVLink receiving are handled by respective warps. The
    / y; {5 P" j1 g( k1 [. f8 Anumber of warps allocated to each communication task is dynamically adjusted according to the
    0 d1 V$ s* S: Q# @% D% O/ factual workload across all SMs. Similarly, during the combining process, (1) NVLink sending,
    8 K( D' t# C. }; M7 u(2) NVLink-to-IB forwarding and accumulation, and (3) IB receiving and accumulation are also
    2 _7 S1 m$ ?- ^: R* Uhandled by dynamically adjusted warps. In addition, both dispatching and combining kernels
    " o# ]& o& X/ e' Moverlap with the computation stream, so we also consider their impact on other SM computation
    3 X" }$ Q7 O, o. e# pkernels. Specifically, we employ customized PTX (Parallel Thread Execution) instructions and
    + Y1 }+ T* i5 ~* J6 d6 Hauto-tune the communication chunk size, which significantly reduces the use of the L2 cache: g2 m3 |% b7 v- k4 p- z
    and the interference to other SMs.$ M) Q, d0 D! F; s7 S% h! `
    8 w8 q( m+ H5 X
    通俗一点说,就是为了实现高效的跨节点全面通信。解决的问题本质上和唐家山老师日志里说的双机对拷的场景差不多。一般来说单机多卡之间用nvlink,多机多卡之间依赖IB网络,但nvlink的速率是IB网络的速率的3.2倍,需要通过一些优化来实现更好的传输策略。这是一整套方案。6 ?1 d: F; Q# ^, }( e) S
    ; [9 B" I- L# F9 c2 W
    我的理解,使用PTX在其中,是为了更精准的定制线程执行减少通信块分配传输之间的串扰。
    # T  w8 D( S9 X* X; r: Z6 H( ~
    % \! |9 N* U9 M. m目的不是为了绕cuda,反而是为了让cuda的效率更高。
    " f# m& B/ l  k+ A8 s, n" S  \( f! C
    类比一下,就好比发现网卡驱动在对拷特定内存块的时候会和应用的线程执行出现串行导致效率降低,而绕开操作系统定义的与网卡驱动的接口,直接使用网卡支持的指令集进行了优化。

    点评

    给力: 5.0 涨姿势: 5.0
    给力: 5 涨姿势: 5
      发表于 2025-2-6 09:51

    评分

    参与人数 2爱元 +14 收起 理由
    黑洞的颜色 + 10
    唐家山 + 4

    查看全部评分

    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    3 小时前
  • 签到天数: 3237 天

    [LV.Master]无

    15#
    发表于 2025-2-6 09:51:37 | 只看该作者
    本帖最后由 唐家山 于 2025-2-6 09:53 编辑 8 S3 `  v6 Z! i
    晨枫 发表于 2025-2-6 08:50- U4 G4 h; b$ K$ [7 s3 x8 |
    多谢解释。那DS为什么不直接用CUDA,还要费事用PTX呢?

    . s. d' z4 g8 I5 e- q/ l: h  G2 f' n% P  E" ~+ T5 q
    应该是性能的原因。打个比方吧,操作系统内核一般都是用C语言写的,但是一些关键部分会用汇编语言来写。原因就是汇编语言的代码(指令)比C语言编译后的代码(指令)的性能要高。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    16#
     楼主| 发表于 2025-2-6 09:53:26 | 只看该作者
    唐家山 发表于 2025-2-5 19:51
    6 N7 ~) R3 s) z" r" Y( `) M应该是性能的原因。打个比方吧,操作系统内核一般都是用C语言写的,但是一些关键部分会用汇编语言来写。 ...

    ' `/ m! G4 B; ~+ ]4 C; H多谢解释。
    & G5 A4 H3 a) S6 @5 A" q- y' U( e- \- D
    那DS如果把模型移植到华为芯片,应该需要重写软件吧?而且无法从原有的CUDA架构下移植?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2020-4-8 10:45
  • 签到天数: 227 天

    [LV.7]分神

    17#
    发表于 2025-2-6 09:58:41 | 只看该作者
    本帖最后由 xiejin77 于 2025-2-6 10:01 编辑
    . Z% @; `) Q1 P! _5 Y2 _1 H
    晨枫 发表于 2025-2-6 09:53
    & ]# f& Q) [; G7 @8 R' j/ z$ R多谢解释。  w7 c# ]+ S7 ^* Z* ?
    ) o9 O* O( y" m0 U% s7 V
    那DS如果把模型移植到华为芯片,应该需要重写软件吧?而且无法从原有的CUDA架构下移植? ...

    1 D  H) P* k5 \0 F; r- U: K# T2 P" \$ ?  a6 K0 Y
    这部分是DS用来做模型训练、推理的辅助工具软件使用的底层驱动,理论上说,效率可以接受的情况下是不需要做移植。cuda和华为cann工具链生态的顶层封装其实很像,真正需要适配的是这一部分。
    3 A' b+ w2 Y. P) h
    $ m. \. m3 o% W+ c; b, m华为自己好像发过新闻,ds的670B版本可以在910c的集群上用,但性能只有60%。
    : v3 A7 P. a; y! f0 K" Y/ |+ w
    2 h% a/ c( R$ t8 r大模型的生态产业链其实挺长的,从芯片、数据,算力底座,网络等等等等。甚至连某些小众的领域都可能成为大模型生态链的瓶颈,比如支持rdma的全速网卡和超越IB网络的路由器。这一方面国内还有很长的路要走,很多的坑要踩……

    评分

    参与人数 2爱元 +14 收起 理由
    唐家山 + 4
    雷达 + 10 谢谢分享

    查看全部评分

    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    3 小时前
  • 签到天数: 3237 天

    [LV.Master]无

    18#
    发表于 2025-2-6 09:59:58 | 只看该作者
    本帖最后由 唐家山 于 2025-2-7 09:02 编辑
    4 @6 K7 r5 b" W# `
    晨枫 发表于 2025-2-6 09:536 }, \7 Y; R) Q# H6 \
    多谢解释。
    ) d; U, V9 z0 @" K5 E1 F) G' V. ?
    & m. u  G1 ]0 c" M1 L+ t& T那DS如果把模型移植到华为芯片,应该需要重写软件吧?而且无法从原有的CUDA架构下移植? ...

    : d% y3 h6 D. {  v0 e6 P, h. D) H2 B
    确实需要重写。不过重写软件的代价并不像外界想象的那么高。显卡(计算卡)的硬件架构比较简单,上面用的指令集基本上都是相同或类似的。从CUDA架构移植也不麻烦。真正麻烦的地方,是经常会有一些隐藏的bug需要fix。
    + s& i7 M. f2 P# w+ N
    $ W8 B/ x8 a) P) o+ c( Q更正:刚才查了一下。各个厂家的GPU指令集在架构设计、编程模型上差别还是挺大的,不能直接移植。这是我想当然了。另外,早期的显卡上的操作比较简单,现在的显卡(计算卡)的操作已经相当复杂了。以后还得学习之后再发言,否则就闹笑话了。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    19#
     楼主| 发表于 2025-2-6 10:02:58 | 只看该作者
    xiejin77 发表于 2025-2-5 19:58+ v7 |* v4 l$ c$ K$ g, c/ X
    这部分是DS用来做模型训练、推理的辅助工具软件使用的底层驱动,理论上说,效率可以接受的情况下是不需要 ...

    8 }* R4 [) R6 f$ n; q嗯,不大懂,看来way over my head了,就不去勉强搞懂了。
    1 r% d0 O0 @/ ^9 I: y3 Y4 E# f- Z! H% u( b
    多谢解释。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    20#
     楼主| 发表于 2025-2-6 10:04:40 | 只看该作者
    唐家山 发表于 2025-2-5 19:59
    " ^. i* T( V1 s( Z5 _6 d, j确实需要重写。不过重写软件的代价并不像外界想象的那么高。显卡(计算卡)的硬件架构比较简单,上面用的 ...
    + l6 ]- l. A7 [( H
    多谢解释。
    3 I" v! k" ^! q3 i. W6 E, D3 y: q- p6 W3 E& r0 A/ Y8 J
    我用过的语言不多,除了常用的科学计算语言,工控语言用的比较多,各厂家之间基本上无法移植,还不只是语句上的差别,有些架构上就不一样。但看来图形卡的专用语言没有那么不同。
    回复 支持 反对

    使用道具 举报

    手机版|小黑屋|Archiver|网站错误报告|爱吱声   

    GMT+8, 2026-4-27 09:24 , Processed in 0.080094 second(s), 20 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表