算法打工人小旺 level
获赞
0
粉丝
0
关注
0
看过 TA
2
中山大学
2025
算法工程师
IP属地:山东
阿里高级算法工程师,多模态/大模型/搜广推方向辅导
私信
关注
07-21 17:37
已编辑
中山大学 算法工程师
1️⃣Q1:针对翻译类、创意写作类、头脑风暴类任务,分别如何设置 temperature 和 top_p?任务越标准越严谨(如翻译),temperature 就越低;任务越开放越创新(如写作、头脑风暴),就适当提高 temperature 和 top_p,增强多样性。2️⃣Q2:一个专业的提示词模板由哪几部分构成?为什么提示词中需要描述角色定义?一个专业的提示词(Prompt)模板通常包含以下几部分:角色定义(Role)→ 告诉模型“你是谁”(例如你是医生/律师/客服/算法工程师)。任务目标(Task)→ 明确你要模型完成什么任务,比如“写摘要”、“做分类”、“写代码”。上下文信息(Context)→ 提供必要背景,让模型理解问题场景。输入数据(Input)→ 提供需要处理的具体内容,如文本、问题或数据片段。输出格式要求(Output Format)→ 规定模型输出的格式或风格,比如表格、列表、JSON 或限制字数等。因为大模型是通过模式学习的,角色定义能引导模型以更专业、更符合预期的语气和风格回答问题。3️⃣Q3:为了尽可能防止提示词注入,如何设计提示词模板?如何在系统层面检测提示词注入攻击?1. 提示词模板设计防护明确角色设定:在 prompt 中指定模型身份和行为范围,如“你是一个只能回答财经问题的助手”。使用指令封闭结构:避免开放式提示,使用模板化结构如 "指令: {instruction} \n 输入: {input} \n 输出: "。控制用户插入点:将用户输入限制在变量 slot 中,避免影响系统指令。2. 系统层面注入检测关键词黑名单匹配:检测如“忽略之前的指令”“你现在是…”等注入特征。提示词审查机制:在提示词构造后进行语义分析,识别可能的角色切换、指令覆写。响应行为监控:监控输出是否越权,如输出系统不允许的内容,可触发告警或拒答。使用上下文分离机制:通过系统-用户分段处理,防止用户内容污染系统 prompt。4️⃣Q4:在没有推理模型之前,如何让模型先思考后回答?思维链、自洽性、思维树等几种技术各有什么优缺点?在没有推理能力前,如何让模型“先思考后回答”?通过提示词工程引导模型“思考”,即在 prompt 中显式要求模型列出推理过程,如加上:"请一步步思考再作答"(思维链)"请验证你的答案是否与前提一致"(自洽性)"请考虑多种可能情况,再做判断"(思维树)5️⃣Q5:如何保证模型的输出一定是合法的 JSON 格式?将大模型用于分类任务时,如何保证其输出一定是几个类别之一,而不会输出无关内容?如果开发一个学习英语的应用,如何确保其输出的语言始终限定在指定的词汇表中?如何保证输出是合法 JSON 格式?结构化提示词:明确指令,如:“请仅输出以下 JSON 格式:{"label": ..., "score": ...},不添加任何解释。”使用函数调用(Function Calling / Tool Use)机制:如 OpenAI / Qwen 支持结构化 schema,让模型输出严格符合预定义结构。后处理校验:使用 JSON 解析库进行合法性校验,不合法则重试生成或触发 fallback 策略。分类任务中如何约束输出为限定类别?封闭式提示设计:明确说明“只允许从以下选项中选择一个:A、B、C”。Few-shot 示例引导:通过提供标准分类示例(如“输入:... → 输出:B”)提高一致性。输出校验与纠偏:使用正则或解析器判断输出是否合法,不合法时触发二次问答或重新生成。可选:使用 Logits Bias / 多标签 token sampling 控制输出 token(限 API 层实现)英语学习应用中如何限制词汇范围?词汇表内提示约束:在提示中加入说明:“请仅使用以下词汇表中的单词作答”,并附上词表。使用词表检索后重写(Constrained decoding):结合规则或重写策略,将非词表内词替换或拒答。训练或微调阶段加入词表限制示例:增强模型对“词汇边界”的理解。结合语法校正模块二次过滤:检测并剔除越界词汇。5️⃣Q5:如果我们需要生成小说的标题、角色描述和故事梗概,当单次模型调用生成效果不佳时,如何分步生成?可以采用分步生成策略,分阶段控制质量与连贯性:分步流程设计:Step1:生成小说主题或关键词Step2:基于主题生成小说标题Step3:根据标题设定角色Step4:生成故事梗概优点:更高控制力:每步可加入人工或规则约束,确保输出质量。提升上下文一致性:逐步构建世界观,避免信息混乱。易于纠错与重试:某一步生成不佳时,仅重试该步。6️⃣Q6:如果用户跟模型对话轮次过多,超出了模型的上下文限制,但我们又希望尽可能保留用户的对话信息,该怎么办?信息摘要:对早期对话进行摘要压缩,保留核心内容,如用户目标、偏好、历史提问等。结构化记忆:将对话转为结构化格式存入外部 memory,后续构建 prompt 时引用这些结构化内容,而非逐轮堆叠原始对话。轮次截断:固定保留最近 N 轮对话,加上摘要或记忆,构成上下文窗口。外部记忆+RAG 机制:将历史对话存入向量数据库,用户提问时检索相关历史片段,再拼接进 prompt。7️⃣Q7:如何编写一个智能体,帮助用户规划一次包含机票预订、酒店安排和景点游览的旅行?需要配置哪些工具?如何确保系统在面对不完整或矛盾的信息时仍能提供合理建议?采用基于工具调用的智能体架构用户输入 → 智能体分析任务意图 → 规划任务流程 → 多工具调用 → 整合回复结果📳对于想求职算法岗的同学,如果想参加高质量项目辅导,提升面试能力,欢迎后台联系。
0 点赞 评论 收藏
分享
最近遇到一个训练代码,混合精度使用 apex,多卡还是 torch ddp+mp.spawn 子进程启动的方式,性能受限于 python 的 gil 锁。其实对于混合精度训练 pytorch 已经 merge 进了 amp,fsdp 也支持了 mixed precision policy,多卡训练有 torchrun 启动器,还支持多机分布式。pytorch 已经有很多新的 feature,为什么不去用呢?1️⃣起源17 年, 提出了混合精度训练:Mixed Precision Training。用 fp16 去表示 fp32 计算,在训练中会有一些数值问题:🌟精度下溢/上溢🌟fp16 数值范围和分布不匹配,导致梯度归零首先第一个问题,fp16 的表示范围小于 fp32,因此会产生 underflow、overflow第二个问题,对于 activation gradient 的分布,很大一部分较小的值在 fp16 下是不可表示的,会发生下溢 underflow 被置为 0,导致反向传播中梯度就丢失了。混合精度训练中的数值问题和模型量化中遇到的数值问题其实很类似,都是从高精度表示范围映射到低精度表示范围,在量化中是通过 calibration 校准进行不同精度范围的线性映射。在混合精度训练中是引入了 loss scaling 梯度缩放,防止非常小的梯度值在使用 fp16 进行表示时 underflow 下溢变成 0。在前向传播计算得到损失值 loss,开始反向传播 backward 之前,对 loss 进行缩放,乘以一个大于 1 的常数,称为缩放因子 S,例如 1024、4096 等。然后用缩放后的 loss 再去进行 backward,又由于求导是基于链式法则,反向传播过程中所有的梯度值都会被进行同等缩放。但放大的梯度导致后续所有依赖梯度大小进行计算的操作都会失真,权重更新时 w=w-lr*grad,导致权重更新量也会被放大 S 倍,相当于变相增大了学习率 lr,导致训练过程不稳定,且与 fp32 训练的行为不一致。因此在 backward 之后,更新模型权重之前,包括所有需要依赖梯度大小进行计算的操作之前。要在 fp32 精度下对权重梯度进行反缩放 unscaling,除以之前放大的缩放因子 S,unscaling 之后的权重梯度也可以应用梯度裁剪和权重衰减等依赖于梯度大小值的操作。然后 optimizer 里面会 copy 一份 fp32 的主权重 master weights 进行参数更新,更新之后的 master weights 再 cast 到 fp16 同步给模型参数。整个混合精度训练的流程可以表示为:✴️model fp16 weights+fp16 activations✴️fp16 forward✴️fp16 activations✴️fp32 loss scaling✴️weight&activation fp16 backward✴️fp32 grad unscaling✴️fp32 grad clip&decay✴️fp32 master weights update✴️cast to fp16 model weights2️⃣amp18 年 nv 以 pytorch 三方扩展的形式推出了 apex,以支持混合精度,20 年 pytorch1.6 merge 进了 torch.cuda.amp,配合 autocast 实现混合精度训练autocast 是混合精度的上下文管理器,在 context 里面会自动选择 op 对应的计算精度,主要基于白名单机制进行自动类型转换。3️⃣fsdpfsdp 是 21 年 pytorch1.11 的引入的新特性,核心思想来源于 deepspeed zero,在其上又扩展了对混合精度的支持。与 amp 相比,fsdp 灵活度更高,可以通过 FSDPModule warp 设置不同的混合精度策略。以及为了更高精度的数值结果,在 fp16 activation 计算和模型参数 all-gather 的基础上,可以使用 fp32 进行 gradient 的 reduce-scatter 和 optimizer 的参数更新。QA:这个时候再思考下,数值计算在什么情况下会发生 nan,迁移到混合精度训练流程里面哪些地方可能会产生 nan,怎么检测 nan,怎么避免 nan,哪些是框架已经做的,哪些还需要自己处理的,问问自己是否有了答案?📳对于想求职算法岗的同学,如果想参加高质量项目辅导,提升面试能力,欢迎后台联系。
阿里巴巴二面195人在聊
0 点赞 评论 收藏
分享

创作者周榜

更多
关注他的用户也关注了:
牛客网
牛客网在线编程
牛客网题解
牛客企业服务