几十块 GPU 整齐地插在机架里,风扇在转,电费照常扣,可训练曲线就是爬不动。团队第一反应通常是加卡、换 H100、调大 batch,钱花在刀背上——因为真正的阻塞点不在显存,也不在算力,而在「数据能不能按时喂到 GPU 面前」。在美西做 AI 训练的团队,尤其是把集群放在西雅图及周边节点的团队,最容易踩的坑就是:把对象存储当成本地盘来读,把预处理当成顺手的小事,结果 GPU 利用率长期卡在四成到六成,昂贵的加速器一半时间在等数据。本文不谈 GPU 怎么选,只拆训练数据这一条供给链路:对象存储的读取带宽、本地 NVMe 缓存、预处理 CPU 与内存,以及西雅图节点的电力与网络特点,如何共同决定你的真实训练吞吐。
在谈具体存储配置之前,先把西雅图这个节点的底子说清楚,因为它直接约束你能拿到怎样的网络与带宽。西雅图是美国西北太平洋地区的互联枢纽,城里的 Westin Building(2001 6th Avenue,由 Digital Realty 运营)是美国西海岸连接密度最高的运营商酒店之一,汇聚了 250 家以上的网络与运营商,Seattle Internet Exchange(SIX)也在这里落地,本地对等互联与大容量传输能力成熟。对训练任务而言,这意味着出网路径多、回程选择灵活、对等成本低,对从对象存储或云端拉取数据是有利的物理基础。
电力方面,华盛顿州以水电为主,工业电价明显低于加州,公开资料给出的区间大致在每千瓦时 0.048 到 0.12 美元之间,具体取决于负载率与购电协议结构;发电结构中水电占比可达六成以上。这点对常年满载跑训练的团队很关键——电力是训练总成本里被低估的那一项。但也要看到另一面:西雅图本地的电力与新建空间在 2026 年趋于紧张,部分新增大型数据中心受到审批与容量约束,新增供电变电站的等待周期可能拉到 18 到 36 个月。所以真正适合大规模训练扩产的,往往不是西雅图市中心,而是向东迁移到华盛顿州中部(如 Quincy)以及俄勒冈 Hillsboro 这类以水电和土地见长的超大规模走廊;西雅图本地更擅长做互联、做研发、做中小规模的高密度集群。
一万网络深耕 IDC 行业 19 年(成立于 2007 年),在为美西 AI 团队规划训练基础设施时,始终把数据供给链路与 GPU 算力放在同等重要的位置,因为对我们见过的多数训练故障来说,瓶颈从来不是「卡不够」,而是「数据到得太慢」。布局西雅图及美西北时,建议先确认机房的供电余量与到对象存储/云区域的网络路径,再谈具体存储带宽,顺序不能反。
把一次训练迭代拆开看,数据要穿过四道关口才会变成 GPU 上的张量。第一关是数据集存储,原始数据(文本、图片、视频、代码)躺在对象存储或并行文件系统里,这一层只要求「便宜、持久、能顺序写」。第二关是数据加载,训练进程通过网络或本地磁盘把样本读进 CPU 内存,这里开始出现带宽与延迟的拉扯。第三关是预处理,CPU 负责分词、解码、图像增强、归一化、组 batch,这部分吃的是核数与内存带宽。第四关才是把处理好的 batch 经 PCIe 搬到 GPU 显存,交给 Tensor Core 算前向、反向与优化。
这套四段式之所以重要,是因为它把「训练快慢」还原成了一条有向流水线,每一关都有自己的时间预算。流水线能不能满转,取决于最慢那一关的吞吐,而不是最快那一关的上限。一个常见的误判是:看到 GPU 显存没占满、算力没跑满,就以为「卡够用、再加点任务」,却没意识到上游某一关已经卡死,下游再空也接不到活。更隐蔽的是各关之间的「握手开销」——数据从存储到内存、从内存到显存,每次跨越总线都会有拷贝与同步成本,若不做异步与重叠,这些成本会一段段叠加,最终把有效利用率啃掉一大块。所以在做容量规划时,应该把四关当作一个整体来算「端到端每样本延迟」,而不是分别看各自峰值。
理想状态下,这四关应该像流水线一样重叠:GPU 在算第 N 个 batch 的时候,CPU 在预处理第 N+1 个,存储在预取第 N+2 个。只要任意一关跟不上,整条流水线就塌缩成「GPU 等数据」的闲置状态。问题是,多数团队的注意力集中在第四关(买更好的卡),却放任第一到第三关用最朴素的方式跑——对象存储直接逐样本读取、预处理和加载挤在同一组 CPU 上、本地连块像样的 NVMe 都不留。等到利用率上不去再回头查,才发现是供给侧先垮了。
理解这四段式的价值在于:它能把「GPU 利用率低」这个笼统症状,精确翻译成某一个具体环节的吞吐缺口。下面几节就逐关拆开,告诉你每一关常见的塌缩点、可量化的带宽需求,以及西雅图的节点条件如何影响它。
还有一个被低估的维度是「多节点并发下的请求放大」。训练集群往往有几十甚至上百个 worker 同时读同一个桶,每个 worker 都独立发起对象请求,对象存储侧要同时应答海量小请求,极易触发限流与连接拥塞;一旦限流生效,所有 worker 一起变慢,呈现出来的现象就是 GPU 利用率周期性掉坑。把读模型从「每个 worker 各自回源」改成「按 shard 预取、本地命中、只在缺失时回源」,请求的并发压力会下降一个量级,出带宽账单也跟着瘦身。这也是为什么在数据管道设计里,「减少回源次数」和「提高单次读取体积」是同一个优化动作的两面。
对象存储(S3 兼容、GCS、Azure Blob 一类)天生为「无限容量、按需付费、持久可靠」设计,适合冷数据、备份、归档,但未必适合直接喂训练。它的两个软肋在训练场景被放大:一是 REST 接口与网络往返带来的元数据开销,对小文件尤其致命——当数据集是上亿张 JPEG 或海量小音频时,逐个对象走协议握手,有效吞吐可能直接被压到每秒几百兆字节以下,与链路带宽无关;二是对象存储的访问模式是「扁平、等长」的,没有「热数据更快」的概念,而训练恰恰会反复回头读同一批样本,每轮 epoch 若都回源对象存储,就产生了重复的网络往返与出带宽消耗。
更要命的是出带宽成本与限速。云对象存储通常对读取请求和数据出流量分别计费,多节点并发拉取同一个桶,很容易触发服务商的速率限制,进一步叠加延迟;同时每次读取都在烧出带宽账单。所以「直接读对象存储」最直观的后果是:第一个 epoch 被网络带宽卡住,后续 epoch 仍在为重复出流量付钱,GPU 则在两边之间间歇性闲置。这不是规模问题,是访问模型与训练负载错配的结构性问题。
应对办法不是抛弃对象存储——它做全量数据集归档和 checkpoint 冷备份仍然是性价比最高的选择——而是把它从「热路径」上挪开:原始数据留在对象存储(第三层),前面架一层本地或并行的 NVMe 高速层(第一、二层)承接活跃训练数据。下文会专门讲缓存策略与带宽估算。
把训练数据「预取到离 GPU 最近的地方」是提升利用率最直接的一招。典型做法是分三层:第一层是每台 GPU 节点自带的本地 NVMe,容量通常在每节点 3 到 15 TB,单盘顺序读吞吐可达约 25 GB/s,用来缓存当前正在训练的高频样本与活跃 batch;第二层是节点间共享的并行文件系统(Lustre、BeeGFS、WekaFS 之类,跑在 NVMe 闪存阵列上),可用容量常落在 100 到 500 TB,对集群聚合吞吐可达 100 到 400 Gbps,负责把数据集从对象存储一次性搬进来并做训练期分片读取;第三层才是对象存储,存全量数据集、checkpoint 与归档。
一次训练 epoch 的数据流应该是「第三层到第二层」只发生一次(训练前预置),「第二层到第一层」在训练全程持续发生。真正延迟敏感的是第二层到第一层这一段:一个 batch(2 到 50 GB,取决于 batch 大小与模态)必须在 1 秒内加载完,否则 GPU 就开始空转。这就要求第二层是亚毫秒级延迟、聚合读吞吐在 50 GB/s 以上的并行文件系统,而不是普通 NAS 或单台存储服务器。
本地缓存要不要?对西雅图的中小规模训练集群,答案是几乎一定要。但它的大小取决于数据集能否塞进单节点缓存:若整份活跃数据集能放进本地 NVMe(通常 2 到 10 TB 量级),首 epoch 之后全走本地、几乎零网络开销,体验最好;若数据集远超单节点缓存,就必须上第二层共享并行文件系统做分片流式读取,本地 NVMe 只做「当前 shard 的缓冲」。无论哪种,关键动作是「把数据按大块 shard 组织(如 WebDataset 的 .tar、MDS、LitData 的 .bin、TFRecord),用顺序大块读替代逐样本小文件读」,这一步往往比换硬件更能救回利用率。
缓存策略里还有一个常被忽略的「冷温热」分层:训练数据并非每轮都被均匀访问,某些子集(如难例、校验集)访问频率高却体积小,应该常驻缓存不被淘汰;另一些一次性的大块样本可以按需换入换出。简单的最近最少使用策略在机器学习场景未必最优,因为它可能把体积小但关键的校验数据挤出缓存,导致每个评估周期都回源。实践上,应为校验集单独保留固定缓存配额,训练集才走动态淘汰。另外,缓存一致性也要管:若训练数据集在训练中增量更新,必须有一套刷新机制,否则节点读到的是过期样本,模型悄悄跑偏却查不出原因。这些细节决定缓存是「真提速」还是「埋暗坑」。
很多团队以为瓶颈只在「读」,忽略了「读进来之后还要算」。数据增强、解码、分词、归一化全在 CPU 上跑,而 PyTorch DataLoader 这类加载器靠 num_workers 把活并行到多个核上;设 persistent_workers=True 还能避免每个 epoch 重建 worker 的开销,prefetch_factor 则负责异步预取。但 worker 开多了,CPU、内存带宽、存储带宽和进程间通信会互相争抢,收益迅速递减。换句话说,预处理不是「有几个核就能线性加速」的事。
实际配比要看数据模态:图像与多模态训练的解码+增强极吃 CPU 单核性能与内存带宽,一个 8 卡节点配 32 到 64 核、内存 256 到 512 GB 是比较稳妥的起点;纯文本分词相对轻,CPU 压力小一些,但仍要给加载与预处理留出余量,不能被系统进程和其他容器挤占。内存尤其不能省——prefetch 和缓冲都吃内存,预算不足时频繁落盘或触发换页,会让本该在内存里完成的预处理掉回磁盘瓶颈。一个常被忽视的提示:若预处理把大量数据在 CPU 与 GPU 之间反复拷贝,CPU 核会被内存拷贝占满,这时 GPUDirect Storage 这类「存储直送显存」的架构能砍掉中间环节、释放 CPU。
结论很直接:在西雅图部署训练节点时,CPU 与内存要与 GPU 数量同步规划,而不是用「剩什么用什么」的闲散核来凑。一个常见反例是八卡 H100 服务器配了一颗低端 CPU 和勉强够用的内存,结果 GPU 计算力翻了倍,预处理反而成了新短板,整体利用率纹丝不动。
内存带宽本身就是一道独立瓶颈,尤其在解码图像、解压视频、做随机裁剪这类操作时,CPU 核数再多,若内存通道被喂不饱,单核吞吐照样上不去。因此选型时不能只看「核数」这一个数字,还要看内存通道数、每通道频率,以及是否启用了足够的内存交错。对多模态训练,建议直接按「每 GPU 配 32 到 64 GB 内存、每节点 256 到 512 GB」起步,并把一部分预算留给内存而不是全砸在 GPU 上。若团队做的是在线数据增强(训练时实时随机变换),预处理压力会显著高于离线预处理,这时更要提前把 CPU 与内存配足,否则增强一开,利用率立刻跳水。
存储带宽不能拍脑袋,要按「每 GPU 的批次消耗速率」反推。经验口径是:在大语言模型训练里,单张 H100 的批次加载有效吞吐需求通常在每 GPU 每秒 1 到 3 GB;那么一台 8 卡服务器就需要 8 到 24 GB/s 的读吞吐,一个 64 卡集群的聚合存储吞吐需求就会到 64 到 192 GB/s。另有工程口径建议按每 GPU 400 MB/s 到 1 GB/s 的可持续并行读写来规划,一个 512 卡集群就需要 200 到 500 GB/s 的并行存储能力。两条口径方向一致:GPU 越多,后端存储越不能靠「堆机械盘」蒙混。
更落地的估算公式:把 batch 大小、样本大小、每秒 batch 数在全部节点上相乘。举例,10 个节点、每节点 8 张 H100、训练 4 MB 图像、每秒 100 个 batch,所需持续读带宽约为 32 GB/s;再加 checkpoint、数据增强与并发任务的余量,存储、网络、缓存都要按这个目标去配。下面是按数据集规模直接给的配置速查表,数值为规划参考,具体 NVMe 与对象存储单价需以官方实时报价为准。
| 数据集规模 | 对象存储带宽需求 | 本地缓存建议 | 备注 |
|---|---|---|---|
| 小于 2 TB(小模型/实验) | 单节点 2 到 4 GB/s 即可,出带宽压力低 | 单节点本地 NVMe 全量缓存,首 epoch 后零回源 | 对象存储仅作归档与 checkpoint 冷备,性价比最高 |
| 2 到 10 TB(中等视觉/多模态) | 8 到 24 GB/s,依赖共享并行文件系统承接 | 本地 NVMe 缓存活跃 shard,第二层并行 FS 做分片读 | 建议预置全量到第二层,训练期不再回对象存储 |
| 10 到 100 TB(大模型预训练) | 50 到 200 GB/s 聚合,需多存储节点横向扩展 | 本地 NVMe 仅缓冲当前 shard,第二层必配并行文件系统 | 对象存储出带宽成本占比上升,应尽量减少重复回源 |
| 100 TB 到 PB 级(超大规模语料) | 200 GB/s 以上,按 512 卡口径预留 200 到 500 GB/s | 多层 NVMe 并行文件系统 + 本地缓冲,shard 化流式读 | 对象存储退为冷归档,热数据全程留在高速层 |
这张表给的是规划方向,不是报价单。GPU 本身的公开价格锚点可参考:A100 40G 约 2800 元/月、H100 八卡约 8 到 12 万元/月(均为公开渠道参考价,实际以厂商实时报价为准);本地 NVMe 与对象存储的具体单价波动较大,请直接询价或「以官方实时报价为准」,切勿用本文数字当作成交价。
回到西雅图这个具体节点,它对训练数据管道的影响集中在三点。第一是互联质量:Westin Building 的高密度运营商与 SIX 对等交换,让训练集群到云区域(AWS US-West-2、Azure West US 2、GCP US-West1 等太平洋西北云边缘)的回程更短、路径更多,从对象存储拉全量数据集的首 epoch 更顺。第二是电力成本:水电主导的低价工业电,摊薄了常年满载训练的电费,对「数据供给层」里那批 NVMe 与并行文件系统服务器的运营成本同样友好。
第三是容量现实:西雅图本地受供电与新建约束,超大密度训练更宜向东迁到 Quincy 等水电走廊,西雅图则适合做互联中枢与中高密度研发集群。这意味着,如果你的训练集群在西雅图、数据集在东部云区域或对象存储里,要特别核算跨区回源的出带宽与延迟;若集群与存储同处太平洋西北,热路径就短得多。另外,西雅图所在区域有地震与野火等灾害风险,关键训练数据与 checkpoint 应落实异地复制与多副本,不能只押在单机房。
对网络本身还要提醒一句:标准 10 或 25 GbE 网络在训练一开始就会被打满,数据孤岛跨云还会强制慢速复制。训练节点与存储节点之间的东西向带宽,建议按上文「每 GPU 1 到 3 GB/s」的吞吐目标去配,否则再好的 GPU 也会被走廊里的网络带宽掐住。
同样的原始容量,不同的组织方式,训练吞吐可能差出一个数量级,这就是数据集放大效应。它的根源是「小文件 + 随机读」:当数据集是上亿个独立小文件时,每次读取都要走一遍元数据查询与协议握手,即便底层链路带宽再大,有效吞吐也会被锁死在每秒几百兆字节;而把样本打包成 WebDataset .tar、MDS、TFRecord 这类大块 shard 后,一次读取就能摊薄到上千个样本,对象存储的并行范围读反而能跑满。换句话说,一个 IOPS 受限的问题,被改写成了吞吐受限的问题,存储层就能正常发挥了。
另一个放大点来自重复回源:训练每轮 epoch 若都回对象存储取同一批样本,网络与出带宽被无谓放大,GPU 在两次回源之间空转。本地 NVMe 缓存的价值,正是把「每轮都回源」压成「首轮回源、后续命中本地」,把放大的出带宽需求收缩回本地盘内。还有训练/服务漂移这类隐性放大:训练特征走数据湖批处理、推理特征走另一条实时路径,两份代码对同一个特征的定义悄悄不一致,模型上线后精度静默下滑——这虽不是带宽问题,却常被误认为是「数据供给没配好」,排查时要分清。
所以数据集放大效应的对策是双管齐下:格式上 shard 化、顺序化;路径上缓存化、就近化。二者叠加,往往比单纯追加 GPU 更能把利用率从五成拉到八成以上,且边际成本更低。
举一个具体的换算例子帮助建立直觉:假设数据集是 1 亿张独立小图,平均每张 100 KB,逐样本读取时每次都要一次对象请求与握手,即便链路有 10 Gbps,有效吞吐也可能只有几百 MB/s;同样 10 TB 数据若打成 10 万个各 100 MB 的 shard,每次读一个 shard 摊薄上千样本,对象存储的并行范围读可以把链路吃满到数 GB/s,差距是十倍量级。这个倍数不会凭空消失,它直接体现在每个 epoch 的耗时上,进而体现在 GPU 是满转还是空转。对团队来说,花一两天做数据集的 shard 化与格式重写,往往比多租几张卡更划算,也更容易在立项阶段就被纳入计划,而不是等问题暴露后再救火。
把前面的分析收敛成一份可执行的配置清单。第一,先量数据集:小于 2 TB 走单节点全量 NVMe 缓存,几乎零回源;2 到 10 TB 上共享并行文件系统并预置全量,本地只缓存活跃 shard;10 TB 到 PB 级必须多层 NVMe 并行文件系统 + shard 流式读,对象存储退为冷归档。第二,按 GPU 数反推带宽:每 GPU 预留 1 到 3 GB/s 的可持续读吞吐,64 卡集群对应 64 到 192 GB/s,512 卡对应 200 到 500 GB/s,并据此决定存储节点数量。第三,CPU 与内存同步配:8 卡节点配 32 到 64 核、256 到 512 GB 内存起步,图像/多模态再上调,给 DataLoader 的 worker、prefetch 与缓冲留足空间,必要时引入 GPUDirect Storage 释放 CPU。第四,网络别短腿:训练节点与存储节点之间的东西向带宽按吞吐目标配,避开标准 10/25 GbE 一上来就被打满。第五,节点选择看西雅图特点:互联好、电价低,但本地超大规模扩产受限,超大负载向东迁 Quincy,并把 checkpoint 做异地多副本。
一万网络深耕 IDC 行业 19 年(成立于 2007 年),建议西雅图及美西北的 AI 训练团队在立项之初就完成「存储带宽 + 本地缓存 + CPU 内存配比」三张表的测算,再决定 GPU 规模;顺序反过来,往往就是几十块卡闲着等数据、钱花在刀背上的结局。按数据集规模与真实吞吐去配,而不是按「卡越多越好」的直觉去堆,才是把训练成本真正花在刀刃上的做法。若需要具体的 NVMe 与对象存储报价,以及适配美西节点的整机与带宽方案,可基于官方实时报价进一步细化,避免以本文的规划区间当作成交价。
问:训练瓶颈怎么定位,确定是数据加载而不是算力?答:看三个信号。一是输入等待占比高,训练循环大量时间阻塞在 DataLoader;二是 GPU 利用率低且起伏大,batch 一来冲高、等数据时掉下来;三是吞吐不随加卡线性增长。诊断用 nvidia-smi 看利用率,用 PyTorch Profiler 或 Nsight Systems 看各阶段耗时,再在训练循环里打点测量「取 batch」耗时。若 GPU 算得快却总在等,基本可判定是数据供给侧的问题,优先查存储、网络与预处理,而不是继续加卡。
问:对象存储带宽具体怎么估算才不拍脑袋?答:用「每 GPU 批次消耗速率」反推最稳妥。单张 H100 在批次加载上的有效吞吐需求约 1 到 3 GB/s,8 卡服务器即 8 到 24 GB/s,64 卡集群约 64 到 192 GB/s;也可按每 GPU 400 MB/s 到 1 GB/s 的可持续读写规划。更细的公式是 batch 大小乘样本大小乘每秒 batch 数再乘节点数。估算后还要加 checkpoint、数据增强与并发任务的余量,存储、网络、缓存按同一个目标值去配,避免某一环脱钩。
问:本地 NVMe 缓存到底要不要上?答:对西雅图的中小规模训练几乎一定要。判断依据是活跃数据集能否塞进单节点缓存:能(约 2 到 10 TB)就全量本地缓存,首 epoch 后零回源;不能就上共享并行文件系统做分片流式读,本地 NVMe 只缓冲当前 shard。无论哪种,关键是把数据 shard 化、顺序化读取。缓存不是可选项,而是把「每轮回源对象存储」压缩成「首轮回源」的核心手段,直接决定 GPU 是否空转。
问:预处理 CPU 配多少才不拖后腿?答:看数据模态。图像与多模态解码增强极吃单核性能与内存带宽,8 卡节点建议 32 到 64 核、内存 256 到 512 GB 起步;纯文本分词相对轻,但也要给加载与预处理留余量。DataLoader 的 num_workers、persistent_workers、prefetch_factor 要协同调,worker 开太多会争抢 CPU 与内存带宽,收益递减。若发现 CPU 被内存拷贝占满,考虑 GPUDirect Storage 把数据直送显存,腾出核力给真正的预处理。
问:西雅图节点有什么特点,对训练管道意味着什么?答:西雅图是美西北互联枢纽,Westin Building 汇聚 250 家以上运营商、SIX 对等交换成熟,到太平洋西北云边缘回程短;电力以水电为主,工业电价低于加州。但本地供电与新建空间在 2026 年偏紧,超大密度训练宜向东迁 Quincy 等水电走廊。实操含义:若集群在西雅图、数据在东部云区域,要核算跨区回源出带宽;同处太平洋西北则热路径更短。同时该区域有地震野火风险,checkpoint 需异地多副本。
问:什么是数据集放大效应,为什么同样容量吞吐差很多?答:它指「组织方式」放大数据供给压力的现象。上亿小文件逐个走元数据与协议握手,有效吞吐被锁死在每秒几百兆字节,与链路带宽无关;打包成 WebDataset、MDS、TFRecord 等大块 shard 后,一次读摊薄到上千样本,对象存储并行读能跑满。另一面是重复回源:每轮 epoch 都回对象存储取同批样本,网络与出带宽被无谓放大、GPU 间歇空转。对策是 shard 化 + 缓存就近化,往往比加卡更能拉高利用率。
问:数据供给这部分的成本怎么算,值不值得投入?答:成本分三块。一是 GPU 闲置的隐性成本——几十块卡空转时,A100 40G 约 2800 元/月、H100 八卡约 8 到 12 万元/月的算力都在空烧,这是最大头;二是对象存储出带宽与请求费,重复回源会持续计费;三是 NVMe 与并行文件系统的硬件与电费,西雅图水电低价对此友好。逻辑是:先把存储带宽与缓存配到位,把利用率从五成拉到八成,省下的闲置 GPU 成本通常远超存储侧投入。NVMe 与对象存储单价请以官方实时报价为准。
本文地区事实参考公开资料:Seattle 数据中心市场与互联情况(Westin Building、Seattle Internet Exchange、DC Hub、Inflect、DataCenterSpace 等公开页面,2025 至 2026 年);华盛顿州电力与数据中心容量相关报道(CLECTIV、Pick a Stor、ROC Telecom 等,2026 年)。训练数据管道与存储带宽口径参考公开技术资料:Alluxio 关于分布式缓存与对象存储 I/O 的论述、ETegro「Storage for AI」、OneSource Cloud 关于均衡计算/存储/网络的比例建议、Rax 与 Hammerspace 关于 GPU 利用率与存储吞吐瓶颈的分析、Verda 与 TechnoLynx 关于数据流式读取与本地 NVMe 缓存的实践,均为 2025 至 2026 年公开来源。上述价格与带宽数字为公开渠道参考或规划口径,具体以官方最新信息为准,本文不作精确报价与性能承诺。
Copyright © 2013-2020 idc10000.net. All Rights Reserved. 一万网络 科技有限公司 版权所有 深圳市科技有限公司 粤ICP备07026347号
本网站的域名注册业务代理北京新网数码信息技术有限公司的产品