Hugging Face 最新开源 SmolVLA 小模型入门教程(一)

news2025/6/7 13:39:01

系列文章目录

    目录

    系列文章目录

    前言

    一、引言

    二、认识 SmolVLA!

    三、如何使用SmolVLA?

    3.1 安装

    3.2 微调预训练模型

    3.3 从头开始训练

    四、方法

    五、主要架构

    5.1 视觉语言模型(VLM)

    5.2 动作专家:流匹配变换器

    六、效率与鲁棒性设计选择

    6.1 视觉令牌减少

    6.2 通过跳过层实现更快推理

    6.3 交错式交叉注意与自我注意

    七、异步推理

    八、社区数据集

    8.1 改进任务注释

    8.2 标准化摄像头视图

    九、结果

    十、结论

    十一、行动号召:


    前言

            今天,我们介绍SmolVLA,这是一个紧凑型(450M)、开源的视觉-语言-动作模型,专为机器人设计,可在消费级硬件上运行。

    • 仅在带有lerobot标签的开源社区共享数据集上进行预训练。
    • SmolVLA-450M在模拟环境(LIBERO、Meta-World)和真实世界任务(SO100、SO101)中,表现优于规模更大的VLA模型及强基线模型如ACT。
    • 支持异步推理,响应速度提升30%,任务吞吐量提升2倍。

    有用链接

    • 用于训练和评估SO-100/101的硬件:https://github.com/TheRobotStudio/SO-ARM100
    • 基础模型:https://huggingface.co/lerobot/smolvla_base
    • 论文:https://huggingface.co/papers/2506.01844

    一、引言

            近年来,Transformers 在人工智能领域取得了显著进展,从能够进行类人推理的语言模型到能够理解图像和文本的多模态系统。然而,在现实世界的机器人技术领域,进展却要慢得多。机器人仍难以在多样化的物体、环境和任务中实现泛化。这种进展受限源于高质量、多样化数据的匮乏,以及缺乏能在物理世界中像人类一样推理和行动的模型。

            为应对这些挑战,该领域近期转向了视觉-语言-动作(VLA)模型,旨在通过单一架构整合感知、语言理解与动作预测。VLA模型通常以原始视觉观察和自然语言指令作为输入,并输出相应的机器人动作。尽管前景可期,但近期VLA领域的多数进展仍被锁定在基于大规模私有数据集训练的专有模型中,往往需要昂贵的硬件配置和大量工程资源。因此,更广泛的机器人研究社区在复现和扩展这些模型时面临显著障碍。

            SmolVLA 通过提供一个开源、紧凑、高效的 VLA 模型来弥补这一差距,该模型仅使用公开的数据集,即可在消费级硬件上进行训练。SmolVLA 不仅发布了模型权重,还使用了非常实惠的开源硬件,旨在实现视觉-语言-动作模型的普及,并加速通用机器人智能体的研究。

    图1:SmolVLA在不同任务变体中的比较。从左到右依次为:(1) 异步拾取放置立方体计数,(2) 同步拾取放置立方体计数,(3) 在扰动条件下进行的拾取放置立方体计数,以及 (4) 在真实世界环境SO101中对乐高积木的拾取放置任务进行泛化。

    二、认识 SmolVLA!

            SmolVLA-450M 是我们的开源、紧凑且功能强大的 VLA 模型。它具有以下特点:

    • 足够小巧,可在 CPU 上运行,使用单个消费级 GPU 进行训练,甚至可在 MacBook 上运行!
    • 基于公开的、社区共享的机器人数据集进行训练
    • 提供完整的训练和推理流程
    • 可在非常经济实惠的硬件上进行测试和部署(如 SO-100、SO-101、LeKiwi 等)

            受大型语言模型 (LLM) 训练范例的启发,SmolVLA 先对一般操作数据进行预训练,然后进行特定任务的后训练。在架构上,它结合了转换器和流匹配解码器,并通过以下设计选择进行了速度和低延迟推理优化:

    • 跳过视觉模型一半的层以实现更快的推理和更小的模型尺寸
    • 交错自注意力与交叉注意力块
    • 使用更少的视觉令牌
    • 采用更小的预训练视觉语言模型

            尽管训练集仅包含不到3万个训练例(比其他视觉语言模型少一个数量级),SmolVLA在模拟和真实世界环境中的性能仍可与更大规模的模型相媲美或超越。

            为了使实时机器人技术更易于使用,我们引入了异步推理堆栈。这项技术将机器人执行动作的方式与它们理解所见所闻的方式分离。由于这种分离,机器人可以在快速变化的环境中更快地做出反应。

    图2. SmolVLA 以多摄像头采集的RGB图像序列、机器人当前的感知运动状态以及自然语言指令作为输入。VLM 将这些信息编码为上下文特征,这些特征用于条件化动作专家以生成连续的动作序列。

    三、如何使用SmolVLA?

            SmolVLA 设计为易于使用和集成——无论您是在自己的数据上进行微调,还是将其集成到现有的机器人系统中。

    3.1 安装

            首先,安装所需的依赖项:

    git clone https://github.com/huggingface/lerobot.git
    cd lerobot
    pip install -e ".[smolvla]"
    

    3.2 微调预训练模型

            使用我们的预训练 450M 模型 smolvla_base,配合 lerobot 训练框架:

    python lerobot/scripts/train.py \
      --policy.path=lerobot/smolvla_base \
      --dataset.repo_id=lerobot/svla_so100_stacking \
      --batch_size=64 \
      --steps=200000
    

    3.3 从头开始训练

            ​​如果你希望从架构(预训练的VLM + 动作专家)开始构建,而不是使用预训练的检查点:

    python lerobot/scripts/train.py \
      --policy.type=smolvla \
      --dataset.repo_id=lerobot/svla_so100_stacking \
      --batch_size=64 \
      --steps=200000
    

            您还可以直接加载 SmolVLAPolicy:

    policy = SmolVLAPolicy.from_pretrained("lerobot/smolvla_base")
    

    四、方法

            SmolVLA 不仅是一个轻量级且功能强大的模型,更是一种用于训练和评估通用机器人策略的方法。在本节中,我们将介绍 SmolVLA 的模型架构以及用于评估的异步推理设置,该设置已被证明更具适应性且能够更快地恢复。

            SmolVLA 由两个核心组件构成:一个处理多模态输入的视觉语言模型(VLM),以及一个输出机器人控制命令的动作专家。以下我们将详细介绍 SmolVLA 架构的主要组件及异步推理的具体实现。更多细节请参阅我们的技术报告。

    五、主要架构

    5.1 视觉语言模型(VLM)

            我们使用 SmolVLM2 作为 VLM 的骨干。它针对多图像输入进行了优化,由 SigLIP 视觉编码器和 SmolLM2 语言解码器组成。

    • Image tokens 图像令牌通过视觉编码器提取
    • Language instructions 语言指令被令牌化,并直接输入解码器。
    • Sensorimotor states 感官运动状态通过线性层投影为单个令牌,以与语言模型的令牌维度对齐。

            解码器层处理拼接后的图像、语言和状态令牌。生成的特征随后传递给动作专家。

    5.2 动作专家:流匹配变换器

            SmolVLA 的动作专家是一个紧凑型变换器(约 1000 万参数),它根据 VLM 的输出生成动作片段,即未来机器人动作的序列。它通过 flow matching objective 流匹配目标进行训练,该目标教模型将噪声样本引导回真实值。相比之下,虽然离散动作表示(如通过令牌化)很强大,但它们通常需要自回归解码,这在推理时速度慢且效率低。而流匹配允许直接、非自回归地预测连续动作,从而实现高精度实时控制。

            更直观地讲,在训练过程中,我们向机器人的真实动作序列中添加随机噪声,并要求模型预测将动作序列引导回正确轨迹的“校正向量”。这在动作空间中形成一个平滑的向量场,帮助模型学习准确且稳定的控制策略。

            我们采用带交错注意力块的变压器架构实现该方法(见图2),并将隐藏维度缩减至VLM的75%,以保持模型轻量化便于部署。

    六、效率与鲁棒性设计选择

            尽管将视觉语言模型与动作预测模块结合是近期VLA系统(如Pi0、GR00T、Diffusion Policy)中常见的设计模式,但我们识别出若干架构选择,这些选择能显著提升系统的鲁棒性和性能。在 SmolVLA 中,我们应用了三项关键技术:减少视觉令牌的数量、跳过 VLM 中的上层,以及在动作专家中交错交叉和自我关注层。

    6.1 视觉令牌减少

            高分辨率图像可以提高感知能力,但会显著降低推理速度。为了取得平衡,SmolVLA 在训练和推理过程中将每个坐标系的视觉令牌数量限制为 64 个。例如,一张512×512的图像会被压缩为仅64个令牌,而非1024个,其中使用PixelShuffle作为高效的打乱技术。尽管底层视觉语言模型(VLM)最初是通过图像分块预训练以实现更广泛的覆盖,但SmolVLA在运行时仅使用全局图像,以保持推理轻量化和快速。

    6.2 通过跳过层实现更快推理

            我们不依赖VLM的最终层(这可能耗时且有时效果不佳),而是使用中间层的特征。先前的研究表明,早期层通常能为下游任务提供更好的表示。在SmolVLA中,动作专家在训练时仅关注VLM特征至可配置的第NN层,该层数设置为总层数的二分之一。这将VLM和动作专家的计算成本减半,显著加快推理速度且性能损失极小。

    6.3 交错式交叉注意与自我注意

            在动作专家内部,注意层交替使用:

    • 交叉注意(CA),动作令牌关注VLM的特征
    • 自我注意(SA),动作令牌相互关注(因果关系——仅关注过去)

            我们发现这种交错设计比使用完整的注意力块更轻量且更有效。仅依赖CA或仅依赖SA的模型往往会牺牲平滑性或地面性。

            在SmolVLA中,CA确保动作充分条件于感知和指令,而SA提升时间平滑性——尤其在现实世界控制中至关重要,因为不稳定的预测可能导致不安全或不稳定的行为。

    七、异步推理

    图3. 异步推理。异步推理栈的示意图。请注意,策略可以在远程服务器上运行,可能配备GPU。

            现代视觉运动策略会输出动作块——即一系列待执行的动作序列。管理这些动作块有两种方式:

    • 同步(sync):机器人执行一个动作块后暂停,等待下一个动作块计算完成。这种方式简单,但会导致延迟,使机器人无法对新输入做出反应。
    • 异步(async):在执行当前块的同时,机器人已将最新观察结果发送至策略服务器(可能部署在GPU上)以计算下一块。这避免了空闲时间并提升了响应能力。

            我们的异步架构将动作执行与分块预测解耦,从而实现更高适应性,并在运行时完全消除执行延迟。其依赖以下核心机制:

    1. 早期触发:当队列长度低于阈值(例如70%)时,我们向策略服务器发送观察结果,请求新的动作块。
    2. 解耦线程:控制循环持续执行 → 推理在并行环境中进行(非阻塞)。
    3. 块融合:相邻块中重叠的动作通过简单合并规则进行拼接,以避免抖动。

            我们非常期待发布异步推理功能,因为它在不修改模型的情况下,保证了更高的适应性和性能提升。简而言之,异步推理通过重叠执行和远程预测,使机器人保持响应性。

    八、社区数据集

            尽管视觉和语言模型在LAION、ImageNet和Common Crawl等大规模网络数据集上蓬勃发展,但机器人领域却缺乏类似的资源。没有“机器人的互联网”。相反,数据分散在不同类型的机器人、传感器、控制方案和格式中,形成彼此孤立的“数据孤岛”。在我们之前的文章中,我们探讨了如何通过开放、协作的努力来解决这种碎片化问题。正如ImageNet通过提供一个大型、多样的基准数据集催化了计算机视觉领域的突破,我们相信,由社区驱动的机器人数据集可以为通用机器人策略发挥同样的基础性作用。

            SmolVLA 是我们实现这一愿景的第一步:它是在经过精心挑选的、反映现实世界变化的公开社区贡献数据集上预先训练的。我们并不只关注数据集的大小,而是注重多样性:各种行为、摄像机视角和体现形式,以促进转移和概括。

            SmolVLA 使用的所有训练数据均来自 LeRobot 社区数据集,这些机器人数据集在 Hugging Face Hub 上以 lerobot 标签共享。这些数据集在多样化的环境中收集,从实验室到客厅,代表了开放、去中心化的努力,旨在扩展现实世界机器人数据的规模。

    图4. 社区数据集的概述。特别感谢Ville Kuosmanen制作了该可视化图表。与学术基准不同,社区数据集自然地捕捉到了复杂、真实的交互场景:多变的光照条件、非最优的演示、非传统的物体以及异构的控制方案。这种多样性对于学习健壮且通用的表示方法将非常有用。

            我们使用 Alexandre Chapin 和 Ville Kuosmanen 创建的自定义过滤工具,根据坐标系数量、视觉质量和任务覆盖范围来选择数据集。经过仔细的手动审查(特别感谢 Marina Barannikov),我们整理出了 487 个高质量的数据集,这些数据集专注于 SO100 机械臂,标准帧率为 30 FPS。这产生了大约 1000 万个坐标系——比其他流行的基准数据集至少小一个数量级,但多样性却明显更高。

    8.1 改进任务注释

            社区数据集中一个常见的问题是任务描述杂乱或缺失。许多剧集缺乏注释,或者包含“任务描述”、‘移动’、“拾取”等模糊标签。为了提高质量并标准化数据集中的文本输入,我们使用 Qwen2.5-VL-3B-Instruct 生成简洁、以行动为导向的描述。

            根据样本坐标系和原始标签,该模型被提示用 30 个字符以下的文字重写指令,以动词开头(例如“Pick”、‘Place’、“Open”)。

            使用的提示为:

    Here is a current task description: {current_task}. Generate a very short, clear, and complete one-sentence describing the action performed by the robot arm (max 30 characters). Do not include unnecessary words.
    Be concise.
    Here are some examples: Pick up the cube and place it in the box, open the drawer and so on.
    Start directly with an action verb like “Pick”, “Place”, “Open”, etc.
    Similar to the provided examples, what is the main action done by the robot arm?
     

    8.2 标准化摄像头视图

            另一个挑战是摄像头命名的不一致。一些数据集使用了清晰的名称,如“顶部”或“手腕右侧”,而其他数据集则使用了含义模糊的标签,如“笔记本电脑图像”,这些标签的含义各不相同。为解决此问题,我们手动梳理了数据集,并将每个摄像头视图映射到标准化方案:OBS_IMAGE_1:俯视视图 OBS_IMAGE_2:腕部固定视图 OBS_IMAGE_3+:额外视角

            我们进一步分离了社区数据集预训练与多任务微调的贡献。在未进行LeRobot社区数据集预训练的情况下,SmolVLA在SO100任务上初始准确率为51.7%。经过社区数据集预训练后,性能跃升至78.3%,绝对提升达+26.6%。多任务微调进一步提升性能,即使在数据量较少的情况下,也展现出强大的任务迁移能力。

    表1. 预训练对社区数据集和多任务微调的影响。

    九、结果

            我们通过模拟和真实世界基准测试对SmolVLA进行评估,以测试其泛化能力、效率和鲁棒性。尽管体积小巧,它在性能上始终优于或与在更大规模机器人数据上预训练的显著更大模型和策略持平。

    表2. SmolVLA 在模拟基准测试中的性能表现。

    表3. SmolVLA 与基线模型在真实世界任务(SO100)中的对比。

            在实际应用场景中,SmolVLA 分别在两个多样化的任务集上进行了评估:SO100 和 SO101。这些任务包括拾取放置、堆叠和分类,涵盖了分布内和分布外的物体配置。在 SO101 任务集上,SmolVLA 在泛化能力方面也表现出色:

    表4. SmolVLA向新实现形式(SO101)的泛化与ACT的比较。

            最后,我们在同步和异步推理模式下对SmolVLA进行评估。异步推理将动作执行与模型推理解耦,使策略能够在机器人移动时做出反应。

    • 两种模式的任务成功率相似(约78%),但异步推理:
      • 任务完成速度快约30%(9.7秒 vs. 13.75秒)
      • 在固定时间设置下完成任务的数量增加一倍(19个 vs. 9个立方体)

            这使得系统在现实世界中的性能更加敏捷和健壮,尤其是在存在移动物体或外部干扰的动态环境中。

    图4. 实际任务中的异步与同步推理。 (a) 任务成功率(%),(b) 平均完成时间(秒),以及 (c) 在固定时间窗口内完成的任务数量。

    十、结论

            SmolVLA 是我们为构建开放、高效且可重复的机器人基础模型所做出的贡献。尽管其规模较小,但在多种真实世界和模拟任务中,SmolVLA 的表现与更大规模的专有模型不相上下甚至更优。通过仅依赖社区贡献的数据集和经济实惠的硬件,SmolVLA 降低了研究人员、教育工作者和爱好者进入该领域的门槛。但这仅仅是开始。SmolVLA 不仅仅是一个模型——它是朝着可扩展、协作机器人技术发展的开源运动的一部分。

    十一、行动号召:

    🔧 立即尝试!在自己的数据上对SmolVLA进行微调,将其部署在经济实惠的硬件上,或将其与当前系统进行性能对比,并在Twitter/LinkedIn上分享。

    🤖 上传数据集!拥有机器人吗?使用lerobot格式收集并分享您的数据。帮助扩展支持SmolVLA的社区数据集。

    💬 加入博客讨论。在下方讨论区提出您的问题、想法或反馈。我们乐于协助您进行集成、训练或部署。

    📊 贡献力量。改进数据集、报告问题、提出新想法。每份贡献都至关重要。

    🌍 传播信息。将SmolVLA分享给对高效、实时机器人策略感兴趣的同行研究者、开发者或教育工作者。

    📫 保持联系:关注LeRobot组织和Discord服务器,获取更新、教程和新版本。

    共同努力,我们可以让现实世界的机器人技术更加强大、更加经济实惠、更加开放。 ✨

    本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2401140.html

    如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

    相关文章

    封闭内网安装配置VSCode Anconda3 并配置 PyQt5开发

    封闭内网安装配置VSCode Anconda3 并配置 PyQt5开发 零一 vscode1.1 下载 vscode1.2 下载插件1.3 安装 二 anaconda 32.1 下载2.2 新建虚拟环境1 新建快捷方式,启动base2 新建虚拟环境 3 配置Qt designer3.1 designer.exe和uic.exe3.2 设置插件,3.4 ui文件转为py文件 4使用4.1 …

    大话软工笔记—组合要素2之逻辑

    1. 逻辑的概念 逻辑,指的是思维的规律和规则,是对思维过程的抽象。 结合逻辑的一般定义以及信息系统的设计方法,对逻辑的概念进行抽提、定义为三个核心内涵,即:规律、顺序、规则。 (1)规律&a…

    7.Demo Js执行同步任务,微任务,宏任务的顺序(3)

    一个包含 同步任务、微任务(Promise)、宏任务(setTimeout) 的例子,JS 是怎么调度这些任务的。 🎯 例子代码(建议复制到浏览器控制台运行) console.log(‘同步任务 1’); setTimeo…

    边缘计算网关赋能沸石转轮运行故障智能诊断的配置实例

    一、项目背景 在环保行业,随着国家对大气污染治理要求的不断提高,VOCs废气处理成为了众多企业的重要任务。沸石转轮作为一种高效的VOCs治理设备,被广泛应用于石油化工、汽车制造、印刷包装等主流行业。这些行业生产规模大、废气排放量多&…

    UE5 2D角色PaperZD插件动画状态机学习笔记

    UE5 2D角色PaperZD插件动画状态机学习笔记 0.安装PaperZD插件 这是插件下载安装地址 https://www.fab.com/zh-cn/listings/6664e3b5-e376-47aa-a0dd-f7bbbd5b93c0 1.右键创建PaperZD 动画序列 2.添加动画序列 3,右键创建PaperZD AnimBP (动画蓝图&am…

    Ubuntu 16.04 密码找回

    同事整理的供参考: 进入GRUB菜单 重启系统,在启动过程中长按Shift键(或Esc键)进入GRUB引导菜单。 若未显示GRUB菜单,可尝试在启动时连续按多次Shift/Esc键。 在GRUB菜单中选择默认的Ubuntu启动项(第一…

    【论文阅读】DanceGRPO: Unleashing GRPO on Visual Generation

    DanceGRPO: Unleashing GRPO on Visual Generation 原文摘要 研究背景与问题 生成模型的突破:扩散模型和整流流等生成模型在视觉内容生成领域取得了显著进展。核心挑战:如何让模型的输出更好地符合人类偏好仍是一个关键问题。现有方法的局限性&#xff1…

    CentOS在vmware局域网内搭建DHCP服务器【踩坑记录】

    1. 重新设置环境 配置dhcp服务踩了不少坑,这里重头搭建记录一下: 1.1 centos 网卡还原 如果之前搭了乱七八糟的环境,导致NAT模式也没法上网,这里重新还原 我们需要在NAT模式下联网,下载DHCP服务 先把centos的网卡还…

    AI炼丹日志-28 - Audiblez 将你的电子书epub转换为音频mp3 做有声书

    点一下关注吧!!!非常感谢!!持续更新!!! 🚀 大模型与Java双线更新中! 目前《大语言模型实战》已连载至第22篇,探索 MCP 自动操作 FigmaCursor 实…

    74. 搜索二维矩阵 (力扣)

    给你一个满足下述两条属性的 m x n 整数矩阵: 每行中的整数从左到右按非严格递增顺序排列。每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target ,如果 target 在矩阵中,返回 true ;否则,返回 false 。…

    8088单板机C语言sprintf()格式化串口输出---Prj04

    #include "tiny_stdarg.h" // 使用自定义可变参数实现#define ADR_273 0x0200 #define ADR_244 0x0400 #define LED_PORT 0x800 #define PC16550_THR 0x1f0 #define PC16550_LSR 0x1f5 / //基本的IO操作函数 / char str[]"Hello World! 20250531 Ve…

    板凳-------Mysql cookbook学习 (九)

    第4章:表管理 4.0 引言 MySQL :: 员工样例数据库 :: 3 安装 https://dev.mysql.com/doc/employee/en/employees-installation.html Employees 数据库与几种不同的 存储引擎,默认情况下启用 InnoDB 引擎。编…

    基于SpringBoot的“嗨玩旅游”网站设计与实现(源码+定制+开发)嗨玩旅游平台开发:景点展示与个性化推荐系统(SpringBoot)

    博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…

    python版若依框架开发:python版若依部署

    python版若依框架开发 从0起步,扬帆起航。 python版若依部署文章目录 python版若依框架开发1.源码2.概述3.部署1.源码 https://gitee.com/insistence2022/RuoYi-Vue-FastAPI 请诸君移步上述链接,即可对python版若依项目进行初步了解。 2.概述 若依框架本身基于java,可以快…

    h5的aliplayer-min.js 加密视频会走到debugger

    h5的aliplayer-min.js 如果 https://g.alicdn.com/apsara-media-box/imp-web-player/2.19.0/aliplayer-min.js走加密视频的话会有debugger 更换aliplayer-min.js版本解决了 https://g.alicdn.com/apsara-media-box/imp-web-player/2.25.1/aliplayer-min.js 对应css&#xff1a…

    DashBoard安装使用

    DashBoard安装使用 一、实验目的 1、掌握dashboard 的安装部署 2、熟悉图像化部署任务:产生pod---定义服务--验证访问 二、实验内容: 1、配置步骤 1.1、Helm安装 离线安装(适用于内网/离线环境) # 根据系统架构选择版本&am…

    极客大挑战 2019 EasySQL 1(万能账号密码,SQL注入,HackBar)

    题目 做法 启动靶机,打开给出的网址 随便输点东西进去,测试一下 输入1、1’、1"判断SQL语句闭合方式 输入以上两个都是以下结果 但是,输入1’时,出现的是另外结果 输入1,1"时,SQL语句没有…

    采用 Docker GPU 部署的 Ubuntu 或者 windows 桌面环境

    # 国内下载不了 docker pull gezp/ubuntu-desktop:24.04-cu12.6.2# 阿里云镜像 docker pull registry.cn-hongkong.aliyuncs.com/gezp/ubuntu-desktop:24.04-cu12.6.2# create container with nomachine docker run -d --restarton-failure --name myubuntu --shm-size1024m -e…

    关于面试找工作的总结(四)

    不同情况下收到offer后的处理方法 1.不会去的,只是面试练手2.还有疑问,考虑中3.offer/职位不满足期望的4.已确认,但又收到更好的5.还想挽回之前的offer6.确认,准备入职7.还想拖一下的1.不会去的,只是面试练手 HR您好,非常荣幸收到贵司的offer,非常感谢一直以来您的帮助,…

    分布式拜占庭容错算法——实现工作量证明(PoW)算法详解

    Java 实现工作量证明(PoW)算法详解 一、PoW 核心原理 #mermaid-svg-AAj0Pvst1PVcVy5v {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-AAj0Pvst1PVcVy5v .error-icon{fill:#552222;}#mermaid…