WebGPU 中的 UE5 Nanite
- • 动机: 该项目旨在使用 WebGPU 重新创建 UE5 的 Nanite 技术,从而实现网络浏览器中的高多边形渲染。
- • 主要特点:
- • Meshlet LOD 层次结构: Nanite 的核心是将网格划分为称为“meshlet”的小簇。每个 meshlet 都有自己的细节级别 (LOD) 表示,允许根据与相机的距离进行有效的剔除和渲染。
- • 软件光栅化器: 对于非常近的物体或当硬件光栅化不足时,使用基于软件的光栅化器来准确呈现精细的细节。
- • 广告牌替代者: 远处的物体被简化的 2D 广告牌取代,以进一步优化性能。
- • 剔除技术:
- • 逐实例剔除: 移除相机视锥之外的整个网格。
- • 每个网格背面锥体剔除: 尝试剔除网格内背离相机的三角形,但由于网格内三角形法线不同,其有效性受到限制。
- • 实施挑战:
- • 简化和误差度量: 确定网格的适当 LOD 级别并保持视觉保真度至关重要但很复杂。该项目承认这是一项持续的挑战。
- • 多步骤剔除: 有效处理场景管理、世界块加载和动画网格增加了渲染管道的复杂性。
- • 建议:
- • 在解决 Nanite 之前,先从更简单的优化开始,例如“使用计算优化图形管道”和“GPU 驱动的渲染管道”。
- • 考虑离线预处理网格以获得更好的性能,但这与项目使用简单 3D 对象格式的目标相矛盾。
- • 工具和资源:
- • meshoptimizer: 用于网格优化和简化。
- • METIS: 用于将网格划分为网格小块的图形分割库。
- • Emscripten: 允许在浏览器中以 WebAssembly 形式运行 C/C++ 代码(如 meshoptimizer 和 METIS)。
- • 项目状态: 该项目目前处于概念验证阶段,展示了 Nanite 在网络环境中的可行性。需要进一步开发以解决简化和错误度量挑战,以实现生产就绪性能。
管理者既定的目标经常会失败,因为员工无法准确地感知到上级真正重视哪些工作
- • 管理者经常说他们会奖励某些事情,但他们的行动并不总是与他们的言论一致。 这种差异造成了一个问题,因为员工善于预测哪些工作实际上会受到重视。
- • 员工会优先考虑那些他们认为经理真正重视的工作 ,即使这些工作与既定目标不同。这意味着“重要的苦差事”可能会被忽略,而更倾向于那些被认为更有影响力的任务,即使这些任务并不直接有助于实现既定目标。
- • 作者认为,员工比管理者本人更了解管理者真正的优先事项。 这是因为员工会随着时间的推移观察管理者的行为和决定,从而形成更准确的心智模型。
- • 几个例子可以说明这个概念:
- • 一位重视原创数学思想的经理可能会发现,员工优先考虑原创数学思想的工作,而不是修复错误,即使员工明确要求修复错误。
- • 喜欢“软件架构”的经理可能会看到团队专注于设计模式,而不是按照要求与其他部门合作。
- • 不喜欢花钱的经理可能会看到,尽管要求高可用性,但基础设施却建设得廉价且低效。
- • 作者提出了三个推论:
- • 疯狂的员工(那些热衷于解决问题的人)有时可以通过坚持不懈地争取必要的改变,从底层开始“让鱼恢复原状”。
- • 从经验中学习并意识到忽视某些任务的危害的管理者更有可能改变他们的优先事项并奖励正确的工作。
- • 作者总结道,管理者需要意识到既定目标与真实价值之间的差异。 他们应该积极努力协调这些目标,并明白员工会优先考虑他们认为真正有价值的东西。
Phind-405B 和更快、更高质量的人工智能答案
- • Phind-405B 简介:
- • 这是 Phind 的新旗舰型号,基于 Meta Llama 3.1 405B。它擅长编程和技术任务。
- • 主要特点:
- • 在启动时使用 32K 上下文窗口提取 128K 个上下文标记。
- • 实现 92% 的 HumanEval 分数(0 次测试),与 Claude 3.5 Sonnet 相匹配。
- • 在实际任务中表现出色,尤其是 Web 应用程序的设计和实施。
- • 培训详情:
- • 使用 FP8 混合精度与 DeepSpeed 和 MS-AMP 库在 256 个 H100 GPU 上进行训练。
- • 与 BF16 相比,FP8 训练性能没有下降,同时内存使用量减少了 40%。
- • Phind Instant 简介:
- • 解决 AI 搜索常见的速度慢问题。
- • 基于 Meta Llama 3.1 8B,每秒最多可运行 350 个令牌。
- • 利用 Phind 定制的 NVIDIA TensorRT-LLM 推理服务器在 H100 GPU 上实现快速运行。
- • 速度优化:
- • FP8 训练、闪存解码和用于 MLP 的融合 CUDA 内核。
- • 搜索改进:
- • 在用户完成输入之前预取网页结果,每次搜索最多可节省 800 毫秒。
- • 升级的嵌入(大 15 倍)用于以 16 路并行性确定相关文本,从而减少延迟。
- • 总体目标:
- • 帮助开发人员更快地进行实验并将新想法变为现实。
- • Phind 专注于技术查询,这使其成为所有类型问题的强大解答引擎。
AlphaProteo 为生物学和健康研究生成新型蛋白质
- • 问题: 设计与特定靶分子结合的蛋白质对于许多科学应用至关重要,包括药物开发、疾病理解和生物传感器创建。传统方法耗时且需要大量实验室工作。
- • DeepMind 的解决方案:AlphaProteo这款新型 AI 系统利用深度学习设计对目标分子具有高亲和力的新型蛋白质结合剂。该系统基于蛋白质数据库 (PDB) 和 AlphaFold 预测中的大量蛋白质结构数据集进行训练。
- • 工作原理: 给定目标分子和所需的结合位置,AlphaProteo 会生成预计强结合的候选蛋白质序列。
- • 令人印象深刻的结果: AlphaProteo 成功设计了多个靶标的结合物,包括 SC2RBD(与 SARS-CoV-2 相关)和 VEGF-A(参与血管生成)。弗朗西斯·克里克研究所的合作者进行的实验验证证实了其中一些设计的蛋白质的结合相互作用和生物功能。
- • 局限性: AlphaProteo 无法为所有靶标设计出成功的结合物,这凸显了蛋白质设计的复杂性。例如,它在 TNFɑ 方面遇到了困难,TNFɑ 是一个与自身免疫性疾病相关的具有挑战性的靶标。
- • 未来方向: DeepMind 计划:
- • 提高 AlphaProteo 的准确性并扩展其应对更复杂目标的能力。
- • 与研究人员合作将 AlphaProteo 应用于生物学和医学领域的实际问题。
- • 通过 Isomorphic Labs 探索药物设计应用。
- • 负责任的开发: DeepMind 强调负责任的开发实践,包括与专家合作解决生物安全问题,并为社区努力实现人工智能驱动的蛋白质设计的最佳实践做出贡献。
在现有固件代码库中部署 rust
- • 与 C/C++ 的互操作性:
- • Rust 需要与您现有的 C/C++ 代码无缝交互。这涉及定义“部分处理程序”——本质上是 Rust 函数,充当调用固件中相应 C/C++ 函数的桥梁。
- • 将这些处理程序视为转换器,允许 Rust 代码利用固件中已有的功能。
- • 处理意外情况:
- • Rust 强大的错误处理系统需要一种方法来处理运行时可能发生的意外事件(如断言失败)。
- • 您将使用该属性定义自定义“紧急处理程序”
panic_handler
。此处理程序通常会指向当前任务/进程的中止函数或固件环境提供的紧急函数。
- • 内存管理:
- • 如果您的固件有分配器,并且您正在使用 Rust 的
alloc
crate,则可以连接 Rust 的内存管理系统以与现有分配器配合使用。这涉及定义实现该GlobalAlloc
特征的全局分配器。 - • 重要提示: 在裸机环境中,内存通常有限。标准
alloc
包假设分配总是成功。如果您的固件并非如此,您可以选择:- • 使用类似
heapless
(用于静态分配的集合)或fallible_vec
(用于动态可错分配)的板条箱。 - • 在尝试分配之前,采用
try_*
方法(如Vec::try_reserve
)检查是否可以分配。
- • 使用类似
- • 如果您的固件有分配器,并且您正在使用 Rust 的
- • 并发和关键部分:
- • 如果您的 Rust 代码需要处理并发,您将需要一种方法来管理关键部分 - 一次只有一个线程可以执行的代码部分。
- • 该
critical_section
板条箱通常用于此目的,并且可以扩展以支持各种架构。
- • 记录:
- • 在 Rust 代码中拥有日志记录功能会很有帮助。您可以围绕固件现有的日志记录功能创建简单的包装器,使其可以从 Rust 访问。
- • 实现该
Log
特征是标准化日志输出的一种便捷方法。
- • 构建大小和性能优化:
- •
-C lto=true
使用编译 Rust 代码时启用链接时优化 (LTO)rustc
。这可显著减少代码大小。 - • 设置
-C codegen-unit=1
进一步的优化和可重复性。 - • 如果您使用 Cargo,
Cargo.toml
建议在文件中进行以下设置:toml [profile.release] panic = "abort" lto = true codegen-units = 1 strip = "symbols" opt-level = "s"
- • 使用 Cargo 构建时,使用
-Z remap-cwd-prefix=.
标志rustc
或将其设置为环境变量(RUSTFLAGS
)以从编译的二进制文件中删除不必要的路径信息。
- •
- • 性能考虑: Rust 的性能通常与 C 相似,并且有示例(如 Rust binding Linux 内核驱动程序)展示了可比的性能。
在主进程中使用 V8 快照加速 Electron 应用
V8 快照和 Electron 性能:核心思想是使用 V8 快照来加速 Electron 应用程序,特别是专注于主进程。V8 快照本质上是 JavaScript 代码的预编译版本,可以快速加载到 V8 引擎(Node.js 和 Chrome 使用的 JavaScript 引擎)中。
快照可执行性挑战:并非所有 JavaScript 代码都可以包含在 V8 快照中。文本强调,在模块执行期间直接使用或修改 Node.js 内置对象的模块会带来问题。这是因为这些内置对象不是初始 V8 快照上下文的一部分。
示例:Monkey-Patching fs.read: 该示例通过展示如何通过 monkey-patchingfs.read函数(Node.js 内置函数)阻止代码被快照来说明这个问题。
解决方案:关注点分离:解决方案涉及分离可快照代码和不可快照代码。依赖于 Node.js 内置代码的代码应移至单独的文件(unsnapshottable.js在示例中)。这允许主模块(module.js)保持可快照,从而受益于更快的启动时间。
真实示例:agent-base模块:文本提到了如何agent-base修改之前对 Node.js 内置程序进行 monkey patch 的模块来解决此快照问题。负责这些修改的代码已移至单独的文件 ( unsnapshottable.js)。
V8 快照的好处:通过使用 V8 快照,Electron 应用程序可以体验更快的启动时间和更高的整体性能,尤其是在处理应用程序逻辑和用户界面交互的主进程中。
你所做的工作决定了你是怎样的人
童年工作:莫里森小时候曾为一位富有的女人(以下简称“她”)打扫房子。这份工作为她带来了急需的收入,也让她学会了责任感。
自豪感和使命感: 莫里森为自己挣钱养家而感到无比自豪。与民间故事中经常成为负担的孩子不同,她觉得自己很有价值,很重要。
动态变化:随着时间的推移,工作变得越来越艰巨。莫里森被要求搬运沉重的家具,这项任务让她体力不支。她还面临着购买 Her 旧衣服的压力,这最初看起来很有吸引力,但最终却让人觉得是一种剥削。
寻求指导: 莫里森向父亲吐露了她对工作越来越不满的感受。父亲的建议简单而深刻:专注于做好自己的工作,记住工作并不能定义你,优先考虑你的家庭和家庭生活,并明白你的身份与你的工作是分开的。
永恒的教训:莫里森父亲的话一直陪伴着她。她学会了珍惜努力工作,但从不让努力工作吞噬自己的自我意识。她还懂得平衡职业义务和个人成就的重要性。