尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

字节AI集中化技术复盘:算力调度与MLOps工程实践

字节AI集中化技术复盘:算力调度与MLOps工程实践 大家在关注字节AI组织变化时更多是看“谁管谁”“哪个BU被调整”但如果把视角切换到技术侧会发现这条“集中化”路线背后真正的主线是AI基础设施、大模型研发、工程化平台从分散走向统一的过程。本文不讨论具体人事而是从技术演进和工程实践的角度带你复盘字节AI三年来的技术架构变化为什么大厂要统一AI平台统一算力调度怎么做MLOps体系如何支撑大模型上线作为开发者怎么基于火山引擎这类平台快速做AI应用文章会给出可参考的架构思路和可运行的代码示例无论是做AI平台、做业务接入还是单纯想理解大厂AI工程化逻辑都可以耐心看完。1. 背景字节AI为什么走“集中化”路线字节跳动的AI能力最初是“业务驱动、团队自治”的模式。抖音、头条、电商、飞书等业务线都有自己独立的算法团队每个团队根据自己的推荐、审核、搜索场景自建特征、训练模型、部署服务。这种模式在业务快速扩张阶段很有优势离业务近、迭代快、需求响应直接。但当AI应用从传统推荐模型升级到大语言模型时代分散模式的问题就越来越明显。1.1 分散模式的三大问题第一个问题是重复造轮子。每个业务线都有一套特征平台、模型训练平台、推理服务框架底层技术大同小异却各自运维、各自排障研发人力被大量消耗在重复建设上。第二个问题是数据孤岛和模型割裂。业务数据散落在不同团队缺少统一的数据中台支撑导致跨业务场景的模型训练成本很高即使是相似的推荐任务也无法复用彼此已经训练好的模型底座。第三个问题是算力浪费。大模型训练需要大规模GPU集群如果各团队单独采购、单独调度会出现严重的算力碎片化。有些团队GPU利用率很低有些团队排队等资源整体资源效益不理想。1.2 “集权”不等于“控制”而是平台化字节在AI领域的调整本质是把AI技术栈重新分层。底层统一建设大规模算力平台、GPU调度、AI基础设施中层统一沉淀大模型底座和公共训练框架上层保持业务团队的灵活性让业务团队在统一平台上做场景化应用。这种“集中化”可以理解为算力集中GPU集群统一管理、统一调度通过容器化技术做资源池。数据集中建设统一的数据湖和特征平台供不同业务安全共享。模型集中统一的预训练大模型各业务通过API或微调方式使用。研发平台集中MLOps、模型注册、版本管理、灰度发布等流程统一。对开发者而言这种趋势带来的直接变化是过去你可能要自己搭建从数据到训练到上线的完整链路现在更多是基于平台能力做上层应用开发。这也是为什么火山引擎、扣子Coze这类平台化产品受到关注。2. 字节AI核心技术栈与工程全景从公开资料和开源项目来看字节AI的技术栈整体上可以分为五层硬件资源层、算力调度层、训练优化层、模型服务层、应用开发层。2.1 大模型研发层字节的大模型研发主要由Seed团队推进代表产品是豆包大模型并在此基础上衍生出通用对话、代码生成、文生图、语音等多个方向的模型。Seed团队定位是“模型底座”负责预训练、对齐、评测等基础工作。这一层的核心挑战是训练数据规模、GPU集群稳定性、模型并行策略、训练框架性能。普通业务团队很少需要直接参与预训练更多是基于成熟底座做微调或应用。2.2 模型训练与优化层字节在训练框架方面开源过多个项目比较有代表性的是字节跳动AML团队开源的BytePS高性能通用分布式训练框架和LightSeq轻量级序列推理/训练框架。BytePS的设计思路是把GPU通信和CPU处理解耦在TensorFlow、PyTorch等框架上提供高性能的分布式训练能力。LightSeq则针对Transformer类模型做了大量算子融合和显存优化在推理场景下吞吐表现优秀。对大团队自建训练平台来说这类开源组件可以帮助提升训练效率对大多数企业来说直接使用云上训练服务会更实际。2.3 推理服务与平台层模型训练完成之后要对外提供服务还需要一套推理服务平台。火山引擎方舟Ark就是面向大模型推理和应用开发的平台提供模型API调用、模型微调、数据评估等功能。推理层通常需要解决几个问题高并发下的请求调度和弹性伸缩GPU显存管理和动态Batch模型多版本灰度发布推理质量监控与降级兜底。2.4 应用开发层在应用开发层字节推出了Coze扣子平台。它可以让开发者通过拖拽方式搭建AI Bot、Agent、自动化工作流也可以直接调用API进行二次开发。这类平台的意义在于降低大模型应用开发门槛让不会写复杂训练代码的开发者也能快速构建AI功能。从技术趋势来看AI Agent是当前关注度很高的方向。Agent的核心不再是单纯的模型能力而是模型与工具、数据、业务系统的编排能力。Coze这类平台本质上是在做这件事提供插件机制、知识库管理、工作流编排、长期记忆等能力。3. 统一算力平台的工程搭建思路字节AI实现“集中化”的一个关键工程动作是把分散在各业务线的GPU资源收拢到统一的算力平台。这种平台通常以Kubernetes为底座向上提供任务调度、资源配额、监控告警等能力。3.1 为什么底层要选Kubernetes大模型训练和推理都属于计算密集型任务但任务形态差异很大训练任务可能是长时间运行的分布式任务推理任务则是高并发的在线服务。Kubernetes的主要优势是资源抽象统一不管是CPU还是GPU都抽象成可调度的资源对象弹性伸缩能力基于HPA或自定义指标自动扩缩容推理服务环境一致性通过镜像把CUDA、Python、依赖库打包避免环境问题多租户隔离通过Namespace和ResourceQuota实现不同团队的资源隔离。3.2 GPU资源池化示例在Kubernetes中管理GPU最常见的做法是使用NVIDIA Device Plugin。它可以自动识别节点上的GPU资源并以可调度资源的形式暴露给Pod使用。下面是一个申请单张GPU训练任务的最小配置# 文件路径gpu-training-job.yaml apiVersion: batch/v1 kind: Job metadata: name: bert-finetune-job namespace: ai-team spec: template: spec: containers: - name: trainer image: registry.example.com/ai/bert-trainer:latest command: [python, train.py] resources: limits: nvidia.com/gpu: 1 env: - name: CUDA_VISIBLE_DEVICES value: 0 restartPolicy: OnFailure这里有几个值得注意的点nvidia.com/gpu: 1表示这个Pod需要申请1张GPU卡limits和requests建议都声明GPU资源避免调度器误判CUDA_VISIBLE_DEVICES是在容器内限定可见GPU防止程序枚举到多卡导致显存错乱。实际线上环境会做得更复杂比如结合抢占式任务、GPU显存按需分配、拓扑感知调度等能力。但核心思路是一致的把GPU从物理设备抽象成平台资源按需申请、按量计费。3.3 训练任务调度策略大模型训练任务通常需要多机多卡这时简单的Kubernetes Job已经不够需要Volcano、KubeFlow或内部自研调度器来支持Gang调度一个任务的所有Pod都满足资源条件后才会启动避免部分Pod占着资源等待队列优先级不同业务线的任务可以设置不同优先级高优任务可以插队弹性资源配额业务低谷时允许团队借用其他团队的闲置算力。这里以Volcano为例一个分布式训练任务可以定义PS和Worker两类角色# 文件路径distributed-train.yaml apiVersion: batch.volcano.sh/v1alpha1 kind: Job metadata: name: distributed-train-job spec: minAvailable: 3 schedulerName: volcano tasks: - replicas: 1 name: ps template: spec: containers: - name: tensorflow-ps image: registry.example.com/ai/tf-trainer:latest command: [python, train.py, --job_nameps] restartPolicy: OnFailure - replicas: 2 name: worker template: spec: containers: - name: tensorflow-worker image: registry.example.com/ai/tf-trainer:latest command: [python, train.py, --job_nameworker] resources: limits: nvidia.com/gpu: 1 restartPolicy: OnFailureminAvailable: 3表示只有ps和worker总实例数达到3个时任务才会真正启动。这就是一个典型的Gang调度配置对分布式训练非常重要。4. MLOps体系从模型训练到稳定上线算力平台解决的是“能训练”的问题MLOps解决的是“训练完怎么可靠上线并持续迭代”的问题。字节AI集中化过程中很重要的一步就是把模型发布流程标准化。4.1 模型注册与版本管理一个模型从训练到上线会经历多个版本迭代。如果缺少统一的模型注册中心会出现本地模型文件丢失、线上模型版本无法追溯、模型与训练代码版本不匹配等问题。模型注册中心通常需要管理以下信息模型名称、版本号模型文件地址对象存储路径训练配置数据版本、超参数、训练框架版本评估指标准确率、延迟、线上效果负责人和业务线信息。4.2 模型发布策略大模型上线不能“一把梭”风险很高。常用发布策略包括金丝雀发布先让少量流量走新模型观察指标没有异常再逐步放量。A/B测试同时运行新旧两个模型同一批用户按流量比例分组对比业务效果。回滚预案新模型出现严重问题时通过配置中心快速切回旧版本。配置中心是实现快速回滚的关键。很多团队用Apollo、Nacos这类配置中心来管理模型路由规则。比如通过配置项切换某个场景使用的模型版本# 文件路径application.properties # 模型路由配置 model.recommend.versionv3.2.1 model.recommend.weight90 model.recommend.backup.versionv3.1.0 model.recommend.backup.weight10这样调整流量比例不需要重新部署服务只改配置并发布即可。4.3 推理服务降级策略大模型推理服务出现故障是常态。模型自身错误率上升、GPU节点异常、下游依赖超时都可能影响线上服务。因此推理服务系统必须有降级策略超时控制调用模型接口设置合理的超时时间避免请求堆积缓存兜底对高频问题使用缓存减少模型压力规则兜底当模型服务不可用时降级到搜索、规则匹配或固定回复熔断机制连续失败达到阈值后不再调用模型直接返回兜底结果。降级不是逃避问题而是保证核心业务可用性。在AI应用设计中这个问题往往比模型指标更关键。5. 开发者落地基于大模型API快速搭建AI应用对大多数开发者来说不需要自建训练平台更重要的是学会基于大模型API做应用。下面以火山引擎方舟接入豆包大模型为例写一个可运行的最小示例。5.1 开通服务和获取密钥通常流程是注册火山引擎账号开通方舟服务在控制台创建API Key查看模型ID比如豆包大模型的端点ID本地安装Python依赖。pip install openai volcengine-python-sdk豆包大模型的接口兼容OpenAI格式所以可以直接使用openai库调用。5.2 调用豆包大模型API# 文件路径chat_doubao.py from openai import OpenAI # 使用火山引擎方舟的接入点 client OpenAI( api_key你的API Key, base_urlhttps://ark.cn-beijing.volces.com/api/v3 ) def chat(prompt: str, model: str doubao-pro-32k): response client.chat.completions.create( modelmodel, messages[ {role: system, content: 你是一个乐于助人的AI助手。}, {role: user, content: prompt} ], temperature0.7, max_tokens1024 ) return response.choices[0].message.content if __name__ __main__: result chat(用三句话讲清楚什么是大语言模型) print(result)代码说明base_url指向火山引擎方舟的OpenAI兼容接口地址model填写具体的端点ID或模型ID示例中是doubao-pro-32k实际以控制台显示的为准temperature控制生成随机性值越大回答越发散建议在文案创作场景调高、在问答场景调低max_tokens限制生成长度对控制成本和响应时间很重要。5.3 快速搭建一个RAG问答机器人RAG检索增强生成是大模型应用落地的热门方案核心思路是先从知识库中检索相关文档片段再把片段和问题一起交给大模型生成回答。这样可以解决大模型“不知道业务私有知识”的问题。下面是一个简化版RAG流程# 文件路径rag_demo.py from openai import OpenAI client OpenAI( api_key你的API Key, base_urlhttps://ark.cn-beijing.volces.com/api/v3 ) # 模拟知识库 knowledge_base [ 火山引擎方舟支持模型微调和推理服务部署。, 豆包大模型是字节跳动自研的预训练大模型。, 火山引擎机器学习平台提供GPU资源池化和分布式训练能力。, 扣子Coze支持创建AI Agent和自动化工作流。 ] def simple_retrieve(query: str, top_k: int 2): # 最简单的检索按关键词命中打分 scored [] for item in knowledge_base: score sum(1 for kw in query.split() if kw in item) scored.append((score, item)) scored.sort(keylambda x: x[0], reverseTrue) return [item for score, item in scored[:top_k] if score 0] def rag_answer(question: str): context simple_retrieve(question) if not context: context_text 未检索到相关知识。 else: context_text \n.join(context) messages [ {role: system, content: 你是企业内部知识助手请基于提供的上下文回答问题。如果上下文中没有答案请明确说明。不要把上下文之外的信息当作答案。}, {role: user, content: f上下文\n{context_text}\n\n问题{question}\n答案} ] response client.chat.completions.create( modeldoubao-pro-32k, messagesmessages, temperature0.3 ) return response.choices[0].message.content if __name__ __main__: print(rag_answer(豆包大模型是哪家公司研发的))这个示例做了两个关键动作检索用最简单的关键词打分方式召回相关知识片段生成把检索结果拼进Prompt让大模型基于上下文回答。生产级RAG系统还需要做向量化、向量数据库检索、重排序、引用溯源、权限控制等但这个示例能帮你理解RAG的核心链路。5.4 AI Agent的最小理解最近AI Agent非常火。简单理解Agent是“大模型 工具调用 记忆 任务规划”的组合。一个最小Agent流程可以描述为用户输入目标模型判断需要调用哪些工具系统执行工具返回结果模型基于结果生成下一步动作或最终回答。# 文件路径agent_simple.py import json from openai import OpenAI client OpenAI( api_key你的API Key, base_urlhttps://ark.cn-beijing.volces.com/api/v3 ) def get_weather(city: str): # 这里是示例实际应调用真实天气API return f{city}今天晴温度22摄氏度。 tools [ { type: function, function: { name: get_weather, description: 查询指定城市的天气, parameters: { type: object, properties: { city: {type: string, description: 城市名称} }, required: [city] } } } ] def agent_run(prompt: str): messages [{role: user, content: prompt}] resp client.chat.completions.create( modeldoubao-pro-32k, messagesmessages, toolstools ) if resp.choices[0].message.tool_calls: call resp.choices[0].message.tool_calls[0] args json.loads(call.function.arguments) result get_weather(args[city]) messages.append(resp.choices[0].message) messages.append({ role: tool, tool_call_id: call.id, content: result }) final client.chat.completions.create( modeldoubao-pro-32k, messagesmessages ) return final.choices[0].message.content return resp.choices[0].message.content if __name__ __main__: print(agent_run(今天北京天气怎么样))这个示例展示了Function Calling的基本流程模型不直接“知道”天气但它学会了调用工具拿到工具返回值后再组织语言回复。这就是Agent最核心的雏形。6. 从字节AI集中化看团队技术建设字节AI的调整不是孤例。国内不少大厂都在做类似的事情建立统一AI中台、收拢大模型团队、统一算力平台。对技术团队来说以下几个问题值得思考。6.1 集中与分散的边界在哪里有些工作适合集中有些适合分散。从字节这类公司的实践来看边界大致是适合集中算力基础设施、基础大模型、MLOps流程、数据中台适合分散业务场景适配、Prompt工程、业务Agent、插件开发、效果评估。集中化解决的是“底座”问题分散化解决的是“应用”问题。两者不是替代关系而是分层关系。6.2 基础设施建设的优先级如果团队要做AI平台建议按以下优先级推进先解决模型接入和统一API管理再建设Prompt管理和应用开发规范接着做模型评测和效果回归最后才考虑算力平台和训练基础设施。很多团队一上来就搭GPU训练平台结果业务上根本没有那么多训练需求导致平台闲置。正确做法是“应用先行、基础设施按需演进”。6.3 中小团队的最佳路径中小团队不要模仿大厂的“重平台”路线更务实的方案是使用云厂商的大模型API而不是自建大模型使用现成的Agent平台或低代码工具快速验证业务场景把精力放在数据治理和Prompt优化上这是大模型应用效果差异的主要来源当API成本高到一定程度再考虑私有化部署开源模型。7. 注意事项与风险控制7.1 数据安全与合规调用云端大模型API时数据会离开本地环境。涉及用户隐私、商业机密的数据需要评估是否允许进入云端模型。常规做法是对敏感字段做脱敏处理后再发送优先使用私有化部署的开源模型处理敏感业务不将核心业务数据明文写入Prompt。7.2 大模型成本控制大模型API按Token计费成本控制很重要。建议优化Prompt长度减少无用的历史消息开启缓存高频问题走缓存区分场景选择不同规格模型简单任务不要用大模型设置预算告警防止异常调用导致成本飙升。7.3 大模型幻觉问题即使模型能力很强也可能生成看似合理但错误的内容。在业务中需要关键信息要求模型给出引用来源对高风险场景医疗、法律、金融设置人工审核通过RAG限定回答范围使用温度参数0.1到0.3降低生成随机性。8. 常见问题与排错思路问题现象常见原因解决思路API调用返回401API Key错误或未开通服务检查控制台密钥确认服务开通状态返回429限流QPS超过账号配额降低请求频率或申请提升配额请求超时网络问题或模型响应过长减小max_tokens设置合理的超时时间生产环境需要多久才能启动首次配置问题先运行python chat_doubao.py验证基础连通性回答内容与预期不符Prompt设计不合理精简Prompt明确格式要求增加示例GPU训练任务Pending资源不足或调度策略问题查看kubectl describe pod检查调度事件模型灰度后效果变差版本差异或Prompt差异对比新旧版本输入输出检查评估指标9. 总结字节AI三年来的“集中化”从技术视角看是一次完整的AI工程化升级算力统一调度、大模型底座集中研发、MLOps流程标准化、应用层保持灵活。这套体系要解决的根本问题是当AI不再是一个团队的事而是整个公司的基础能力时如何让算力、数据、模型被高效共享。对普通开发者来说我们不必照搬大厂的平台建设方式但可以借鉴它的分层思路底层用成熟方案外层快速迭代。模型能力会越来越强应用层的差异化才是大多数团队真正要投入的方向。建议你先动手完成一次大模型API接入再尝试做一个带知识库的问答应用最后体验一次函数调用用实践把这条技术链路真正跑通。
返回列表