办公室环境与硬件配置
视频开篇展示了位于澳大利亚布里斯班的一栋老建筑二楼,这里既是博主Daniel的哥哥Josh的工作室也是他们的办公室。空间略显杂乱但充满生活气息,不平整的楼梯需要小心行走。办公区设有两人的独立工位和一台冰箱,墙上贴满了他们开发的App贴纸。目前团队主要运营两款应用:Keep Track 和 Neutrify。冰箱上贴着的贴纸数量随着新App的发布而增加,目前已有约 1,070 种食物数据收录在Neutrify中。此外,房间内还摆放着一些怀旧物品,如《Runescape》游戏中的“Chin Chopper”模型以及一盆绿植。硬件方面,Daniel主要使用 DGX Spark 进行大部分工作,旁边还有一台配备 RTX490 显卡的深度学习PC。这些设备构成了他日常机器学习工程工作的物理基础。
Neutrify 2.0 功能更新演示
早餐时间,Daniel展示了其团队开发的营养追踪应用 Neutrify 的最新重大更新——2.0版本。该App的核心特色是专注于全食物识别,不使用条形码扫描,而是依赖视觉模型。在单图模式下,应用运行本地设备模型进行快速预览;而在新的多食物追踪模式中,图片会被发送至云端 Gemini 2.5 Flash 模型进行处理。该模式通过特定的Prompt返回JSON格式数据,并映射到内部营养数据库。多食物追踪功能允许用户一次性拍摄包含多种食材的餐盘,例如本例中的班尼迪克蛋。系统成功识别出吐司、荷兰酱、水波蛋和培根等成分,并允许用户手动调整分量(如将吐司调整为 80g)。尽管受限于视觉可见性,无法识别被遮挡的食材(如底部的两个水波蛋),但这一更新显著提升了复杂餐食的识别精度和用户体验。
内容创作与客户获取策略
完成早餐和工作计划后,Daniel开始撰写每日的LinkedIn帖子。他坚持每天早晨花费约 25分钟 在750words.com上写作,认为这是获取客户的关键渠道。他分享了自己的获客逻辑:社交媒体帖子带来潜在客户线索(Leads),进而转化为收入。今天的帖子主题是如何与AI/ML客户合作。他提到,过去的业务机会大多来自他人通过视频或帖子联系他,双方确认时间线、兴趣匹配度及技能契合后才会启动项目。在帖子中,他强调了建立专属测试集(Test Set)的重要性:对于特定业务场景的基准测试,即使公共大模型的榜单可以被“刷分”,但在自己的专属工作流代表样本上表现良好才是关键。这种测试集需要能够随系统改进而重复验证,确保实际业务效果的稳定性。
客户会议准备与日程规划
上午9:30,Daniel参加了一场潜在客户的视频会议。由于音频损坏,具体对话内容未保留,但他回顾了会议要点:双方并未深入细节,而是广泛探讨了客户如何利用AI优化其业务流程。客户展示了现有的工作流和定制数据,双方初步评估了合作的可能性。在此之前,Daniel花费时间阅读客户公司资料,思考机器学习如何融入其业务场景。他的日程安排紧凑且结构化:除了会议和写作,还包括构建用于微调小型LLM的数据集并上传至Hugging Face。下午计划进行 10,000步 的步行、晚上5:30至6:30进行巴西柔术(BJJ)训练,7:00与家人共进晚餐。这种平衡工作与生活的节奏体现了ML工程师在技术深耕之外的个人健康管理与社会连接。
商业洽谈与数据合成策略
在视频开始时,作者提到之前的电话沟通已持续数周,邮件往来频繁但尚未签署正式合同。这种不确定的商业常态在咨询行业中十分常见,项目可能迅速启动,也可能陷入漫长的拉锯战甚至无疾而终。为了利用这段等待期,作者决定完成一个包含 10万条 图像描述(image caption)的数据集,并从中提取食物和饮料的JSON输出。这一数据生成的核心目的是微调大语言模型(LLM),具体计划是对 GMO 3 (70 million参数) 进行微调。一旦获得专门用于食物提取的微调模型,作者计划将其应用于 Data Comp 1B这样的大型数据集,以从图像描述中提取食物名称和饮料名称。这一流程的最终目标是利用提取出的高质量数据来改进计算机视觉模型。作者强调,构建数据集是机器学习工程师日常工作的核心环节之一,包括问题定义、数据制作、验证及上传至Hugging Face等步骤。
异步编程带来的性能飞跃
在生成这6万条合成描述的过程中,作者展示了一项关键的Python技术优化:异步编程(async)。此前使用的模型是 Gemini Flash,采用串行方式处理时速度极慢。通过引入异步并发机制,作者创建了多个虚拟工作线程(workers)来并行请求API。数据显示,当使用 50个并发工作者 时,生成速度达到每秒1.9条描述;而当增加到 200个并发工作者 时,速度提升至每秒8.5条描述。这种并发性使得原本需要 24小时 才能完成的串行任务,缩短至仅需约1.9小时。作者指出,虽然 57,380个样本 的生成预计耗时不到45分钟,但成本估算约为 $42。他特别提到Gemini API在此高并发场景下表现出极高的可靠性,并解释了同步与异步在资源调度上的本质区别:串行是单线程依次执行,而异步则是多任务交错并发处理。
iOS应用开发与团队商业模式
随后镜头转向iOS开发者Josh,他正在演示一款名为 NFI 的应用。该应用能够识别用户摄入的食物成分,例如Josh早餐吃的燕麦粥配酸奶和肉桂。在演示中,他们讨论了如何添加成分(如蜂蜜或枫糖浆)并更新宏量营养素计算。Josh提到他目前也在从事客户项目,包括一个涉及船只的保密项目。Steppy 和 Neutrify 是团队正在构建的其他应用。作者揭示了他们当前的商业模式:自举(Bootstrapping)。由于自有应用程序尚未产生足够收入,团队通过承接外部客户项目来维持运营并资助内部应用开发。这种模式允许他们在真实世界中实践技术,同时通过客户收入覆盖成本。此外,他们还提到了开源项目 Sunny 以及Kaggle竞赛的潜在奖金作为额外的资金来源。Josh在演示中甚至发现了一个导致用户无法加入团队的Glitch,这进一步体现了他们在实际使用中不断迭代和修复问题的过程。
步行会议与工作流程节奏
为了打破长时间面对屏幕的工作状态,作者和Josh选择外出散步。这种步行会议(walking meeting) 不仅是放松方式,更是机器学习工程师应对等待时间的策略。当模型训练或数据加载时,散步提供了宝贵的思考时间。作者提到他们正在开发一款计步应用 Steppy,因此散步具有双重意义:既是为了健康和工作节奏调整,也是为了测试自家产品。他们漫步在Sandgate海滨,途经Shan Cliff Pier和Morton Island,享受阳光并讨论工作。作者总结道,机器学习工程师的日常并非仅仅是编写代码和训练模型,更包括问题构思、数据集构建与验证、以及通过实际生活节奏来平衡高强度脑力劳动。这种将技术工作与生活场景(如散步、饮食记录)紧密结合的方式,构成了他们高效且可持续的工作流。
日常节奏与健康管理的平衡
作为机器学习工程师,高强度的久坐工作对体能是巨大挑战。为了对抗午后因长时间坐着而产生的 sluggishness(迟钝感),作者建立了每两小时进行一次20分钟步行的习惯。这种高频次的短时运动不仅有助于促进血液循环,还能在一天结束时累积至少一小时的步行量。在这个过程中,作者提到了伴侣 Stephie 的陪伴以及即将参加的柔术比赛(Jiu-Jitsu competition)。由于周末需要参加体重级别为84公斤以下的比赛,作者必须严格控制饮食和体重。因此,在午餐时间使用名为 "Neutrify" 的应用扫描食物时,他不得不保持谨慎。尽管午餐包含辣椒牛肉和烤红薯等美味,且热量估算接近目标值,但他仍手动修正了识别结果(将 Chili Conn 更正为 Beef Mints cooked),以确数据准确性。这反映了在个人健康管理中,精确的数据标注对于维持特定体重目标至关重要。 > "To combat that sluggishness you go for a walk get the blood pumping and of course get the steps up."
大规模数据生成的效率验证与成本估算
在等待模型处理60,000个样本的过程中,作者展示了数据处理流程中的关键步骤:干跑(dry run)与结果验证。由于模型在每处理1,000个样本时会保存一次,导致进度条出现明显的卡顿现象。经过午餐时间的等待,任务完成并生成了57,000个标注文本(captions)。作者通过对比预估值与实际输出值,验证了干跑策略的有效性。实际输出的 Token 数量(输入4,350万,输出6.5百万)与预估值(输入4,500万,输出670万)仅相差约10%。这一误差范围证明了通过小规模干跑来估算大规模数据集的成本和可行性是高效且可靠的策略。在机器学习领域,虽然60,000个样本不算极大规模,但通过这种先测试工作流、再评估成本效益的方法,可以显著降低试错风险。作者强调,现代世界中图像和文本数据近乎无限,因此构建可复用的数据集工作流是核心目标。 > "We have finished with 57,000 captions generated... plus or minus 10%. So not that far off."
构建开源数据集与端侧模型愿景
作者的核心目标是创建一个名为 "Food Extract" 的大型文本基准数据集,旨在从食物和饮料图像中提取结构化信息。目前,他正在将新生成的样本与现有的 "Food Extract 75K" 数据集合并,计划构建包含10万+样本的 "Food Extract 135K"。这一举措旨在为微调小型语言模型提供充足的数据支持,进而实现用自定义的端侧视觉语言模型(VLM)替代昂贵的云端API(如 Gemini API)。作者指出,运行在设备上的模型具有低延迟和零成本优势(利用 Apple GPU),尽管目前尚不确定能否完全替代云端模型,但这极具挑战性且充满乐趣。为了验证现有小规模模型的效果,作者测试了基于 "Food Extract 1K"(仅1,000个样本)微调的模型,结果显示其已能较好地识别饮品和食物项目。最终,作者将合并后的135,000个样本上传至 Hugging Face,并提供了详细的 README 和数据集查看器功能。这一开源行为不仅促进了社区协作(已有其他用户开始构建类似数据集),也为后续训练更强大的过滤模型奠定了基础。 > "Hugging face is like the GitHub of machine learning... Food extract 135K."
数据集扩展与模型微调策略
在之前的实验中,数据格式保持一致是关键。本次上传的数据集“Food Extract 135K”与之前的“Food Extract 1K”格式完全相同,但样本量大幅增加。这意味着只需替换代码中的数据集加载行,即可利用更多样本来训练一个更强健的模型。为了验证基础模型的局限性,作者使用了一张展示拜占庭风味菜单的手写羊皮纸照片。当输入给未经微调的Gemma 3基础模型时,它生成了一段描述性的自然语言文本:
"This is a good description of the food. It accurately captures the visual aspects... Here are a few minor suggestions for improvement."
然而,任务目标并非生成描述性文本,而是提取具体的食材列表。基础模型无法直接输出如“feta, sugar, sausages”等结构化数据。因此,核心任务是对Gemma 3进行微调(Fine-tuning),使其从生成通用描述转变为精准提取食品实体。作者计划使用12.1万个训练样本来微调Gemma 3的270M参数版本,以观察其在大规模数据下的表现。
训练过程中的硬件挑战与调整
微调过程在配备Nvidia RTX4090的深度学习PC上进行。起初,作者尝试运行3个epoch(轮次),但遭遇了显存溢出(Out of Memory, OOM)错误。这是因为13.5万样本的数据量远超显存承载能力。为了解决这一问题,作者将批量大小(Batch Size)降低至8。调整后,GPU利用率迅速达到99%-100%,显存使用量为25GB中的22GB。预计训练总时长约为一个半小时。
"I'm going to let this run and then well, while it's running, I think it's time for walk number two. A benefit of going on walks."
在等待训练期间,作者进行了第二次散步。考虑到1000样本时3个epoch已足够,而本次数据量巨大,作者将训练轮次从3个减少到2个。这是一种权衡策略:如果效果不佳,可以留待夜间继续训练;但如果数据量足够大且模型预训练基础好,2个epoch可能已能捕捉到主要特征。这种“规则是:如果模型在训练,我就去散步”的心态反映了ML工程师对长周期任务的常见应对方式。
训练结果评估与模型部署
散步归来,第一个epoch已完成。虽然验证损失(Validation Loss)在第二个epoch后出现波动——训练损失上升但验证损失下降,这通常被视为模型泛化能力良好的迹象。作者决定立即进行评估测试。
"Beautiful. That's exactly what we want."
在文本预测测试中,模型成功从早餐图片描述中提取出了“Baked beans, fried eggs... sausages”等具体食材,准确率极高。随后,作者将微调后的模型上传至Hugging Face Hub,命名为“Food extract gemma fine-tune v2”,并确认其包含13.5万样本的训练记录。为了进一步验证实用性,作者使用Gradio构建了Web演示应用(Demo)。尽管构建过程一度失败并需要修复代码,但最终成功运行。在测试“烤巴兰迪鱼沙拉”和早餐图片时,模型均能准确提取食材列表。值得注意的是,当输入包含“意大利调味汁”的描述时,模型未错误识别出并不存在的饮品项(DI),显示了其精准的过滤能力。目前,数据集已上传至Hugging Face,模型微调任务完成,下一步将是处理十亿级数据集中食品内容的过滤工作。
Neutrify 3.0 产品形态全面升级
视频主角 Daniel 向观众展示了 Neutrify 产品的最新版本,指出其界面和功能相较于之前视频中的展示有了显著变化。此次更新的核心在于 Neutrify 3.0 的正式发布,标志着该产品从单一功能向多模态交互平台的转型。虽然产品依然保留了核心的照片处理功能,但其能力边界已大幅扩展,不再局限于视觉输入。这一升级意味着用户现在可以通过多种不同的方式与系统进行交互,极大地提升了使用的灵活性和便捷性。
支持多模态输入的操作体验
在功能细节上,Neutrify 3.0 实现了真正的多模态支持。用户不再需要局限于拍照,而是可以 通过文本输入、扫描文档或直接语音说话 等多种方式将信息注入系统。这种设计打破了传统单一输入模式的限制,让“你想怎么用它就怎么用”成为现实。Daniel 强调:">> Josh. Uh, Neutrify might look a little different to what you saw in the video... So, you can text it, scan it, say it, you name it, you can put it into Neutrify." 这一描述清晰地传达了产品对多样化输入场景的全面兼容,旨在满足用户在不同情境下的即时需求。
针对早期用户的专属福利政策
为了回馈忠实观众并推广新版产品,Daniel 宣布了一项特别的限时优惠活动。这项福利专门针对 前一千名成功观看完本视频的用户 设计,旨在通过稀缺性激励用户立即行动。受益者将获得 3个月的 Neutrify 免费使用权,且费用由官方承担。Daniel 明确表示:">> And we have something special for the first thousand people who made it to the end of this video. 3 months free Neutrify on us." 这一举措不仅是对观众支持的感谢,也是推广 Neutrify 3.0 的重要营销策略。最后,Daniel 以一句标志性的口号 "Happy whole fooding." 结束了本次介绍。
结论
异步编程显著提升了数据合成效率,将24小时任务压缩至1.9小时。微调后的Gemma 3模型在提取结构化食材数据上表现优异,验证损失下降证明泛化能力强。Neutrify 3.0通过多模态输入和端侧模型愿景,旨在降低云端API依赖并提升隐私与成本效益。团队采用自举模式平衡商业项目与应用开发,证明了小模型微调在特定垂直领域(如食物识别)的实用价值。