人形机器人的一点思考
一、概述机器人的发展涉及到AI、材料、机械、电子、仿生学等多个领域,必然是一个不断迭代进化的过程,不可能一蹴而就。从简单的行走,到奔跑,再到执行复杂动作,如后空翻、拳击等,国外的波士顿动力,国内的优必选、宇树、智元等基本上耗时1~2年左右完成。做一个简单的类比,目前人形机器人的运动能力(不考虑其它)已经度过了蹒跚学步的婴儿期,进化到了幼儿期,甚至在某些极限运动能力上有所超越。然而,在通用性、自主决策和适应未知环境的能力方面,它们仍然远不及人类幼崽的自然智能和学习能力。
二、总体架构机器人系统的总体设计架构是一个典型的分层、模块化系统,旨在实现“感知-规划-行动”(Sense-Plan-Act, SPA)的循环。这种架构结合了硬件(机械结构、传感器、执行器)和软件(控制系统、算法、接口),使其能够感知环境、做出决策并执行任务。 这种架构使得复杂的机器人系统得以构建、维护和升级,是目前行业普遍采用的标准范式。可以分解为四个主要组成部分:
机械系统 (Mechanical System)这是机器人的物理实体,负责执行物理动作和与环境互动。
本体结构:包括机器人的底盘、手臂、关节、末端执 ...
机器人触觉--皮肤
一、人体汗毛的作用人体皮肤上的汗毛(医学上称为毳毛)具有多种重要的生理功能,主要包括调节体温、保护皮肤和感知外界刺激。其作用机制涉及皮肤结构和神经系统的协同工作。
1. 主要功能
体温调节:汗毛通过与立毛肌和汗腺的协同作用来帮助身体维持恒定的体温。
保暖:当环境寒冷时,毛囊底部的微小肌肉——立毛肌会收缩,使汗毛竖立起来(形成“鸡皮疙瘩”现象)。这会在皮肤表面捕捉一层静止的空气,形成隔热层,减少体温散失。
散热:在炎热环境下,汗毛贴近皮肤,有助于汗液更快地蒸发。汗液蒸发会带走热量,从而帮助身体降温。皮肤保护:汗毛充当物理屏障,能阻挡空气中的灰尘、细菌和小昆虫等异物直接接触皮肤,减少皮肤感染和损伤的风险。同时,适量的体毛还能减少紫外线对皮肤的直接照射,起到一定的防晒作用。
触觉感知:汗毛的根部与神经末梢紧密相连。当有轻微的触碰或气流变化时,汗毛的移动会刺激这些神经末梢,使人更快地感知到外界的变化,起到预警作用。
减少摩擦:在某些身体部位(如腋窝),毛发可以减少皮肤之间的直接摩擦,起到缓冲作用,防止皮肤磨损。
辅助排泄:汗毛及毛囊结构可能参与辅助排泄某些重金属等有害物质。
2. 作用机制汗 ...
机器人运动--仿生蚂蚁
一、仿生学仿生学在人工智能(AI)和机器人领域的应用前景非常广阔,它是推动未来技术发展的重要驱动力之一。通过模仿生物的结构、功能和行为,仿生学为解决复杂的工程难题和创造更智能、适应性更强的系统提供了全新的思路。
主要应用前景
提高机器人在复杂环境中的适应性和灵活性自然界中的生物可以在极其复杂、非结构化的环境中生存和移动。仿生学使机器人能够借鉴这些能力:
地形适应性:模仿昆虫(如蚂蚁)或四足动物(如波士顿动力公司的Spot机器人)的设计,使机器人在崎岖不平、楼梯甚至废墟中移动,远超传统轮式或履带式机器人。
软体机器人:受章鱼、水母等软体动物启发,开发能够挤过狭窄空间、安全地与人类互动或在敏感环境中操作的软体机器人。
极端环境探索:仿生机器人可以在深海、太空、灾害现场(地震、火灾)等危险或人类难以到达的地方执行勘测、监测和搜救任务。
推动新型传感和感知技术的发展生物拥有高效、敏感的感知系统。模仿这些系统可以显著提升机器人的感知能力:
仿生视觉系统:模仿人眼或昆虫复眼,开发具有动态立体视觉、超广角视野或高敏感度的视觉传感器,用于自主导航和目标识别。
仿生听觉和嗅觉:开发能够检测 ...
极简`Transformer`实现(基于`llama2.c`commit-4e23ad 23'7/27)
基于源码调试过程,以及如下两篇文章整理。
This repo is line by line walk through of the inference file in llama2.c. Its very verbose & intended for beginners.You will need some familiarity with transformers architecture. If you are a complete novice refer to this excellent blog first.
RahulSChandcllama2.c-for-dummies
The Illustrated Transformer。
jalammarillustrated-transformer
llama2.c 包含了训练代码和推理实现,作者提供了如下几个预训练模型,可以直接运行 run 这个demo程序生成一个简短的小故事。
model
dim
n_layers
n_heads
n_kv_heads
max context length
paramet ...
极简`Transformer`实现(基于`llama2.c`commit-b3c4b6c 24'2/13)
与早期版本(详情可以参考这里:4e23ad8 23'7/27)不同,目前的版本有两种模式,一是generate, 根据给定的prompt生成一个简短的英文小故事。二是chat, 需要输入system prompt和问题,生成一个回答并退出,没有多轮对话,并且回答与问题没有太大关联性而且有不少问题(尤其是15M模型),所以该模式还不完善,并且有一个 feature/chat 分支处于开发中有兴趣可以关注该分支。我们主要关注代码更新的部分。
执行流程该版本代码进行了重构,sampler封装到结构体里,其次把分阶段的执行流程各自封装到函数里面,调用逻辑会更清晰一些。同样的,main主要处理命令行参数,然后是模型推理流程。
main 执行流程
解析命令行参数,包括 checkpoint 文件路径, temperature, steps等。
调用build_transformer,会调用read_checkpoint加载checkpoint 文件内容,包括模型配置和权重。其次调用malloc_run_state初始化运行时变量,包括kv cache等。注意,这里没有再 ...
多机多卡训练:NCCL Debug
大模型因为参数量巨大,即使是Finetune也只能在多卡GPU的机器上训练(全精度),如果是A100 8卡40GB机器,用上DeepSpeed的各种优化之后勉强能训3B模型,7B模型训不了,必须要多机多卡才行。这里记录一下早期探索,使用裸机环境配置多机多卡来跑大模型训练遇到的一些问题。
多机多卡训练需要一个高效的通信框架来协调多个设备之间的数据传输和计算任务。常见的通信框架包括MPI、NCCL等。同时,多机多卡训练还需要一些额外的技术支持,如数据并行化、模型并行化等,以便将计算和存储任务分配到不同的设备上。
虽然多机多卡训练可以大大加速深度学习模型的训练速度,但也面临一些挑战,如设备故障、通信延迟等。因此,在应用多机多卡训练时需要谨慎选择合适的硬件设备和软件工具,并进行充分测试和优化。
测试一环境配置两台主机加入 swarm worker,docker 指定overlay network
容器启动之后,需要手动启动ssh
1/etc/init.d/ssh start
运行 DeepSpeed-chat 多机训练
1NCCL_DEBUG_SUBSYS=ALL NCCL_IB_DIS ...
论文摘要-LLaMA
LLaMA: Open and Efficient Foundation Language Models,是一个包含了 7B ~ 65B 参数量的基础语言模型集合。并且仅仅在公开数据集上训练,T级别的数据量,可以达到Sota 水平。
对于要达到的模型性能,最好的模型并不是训练起来最快,而是推理起来要最快,这样才能节省部署成本。比起快速训练一个大模型,利用更长时间来训练一个小模型,能获得更好的推理性能。我们发现用 1T tokens 训练 7B 模型可以达到的性能,比用 200B tokens 训练一个 10B 的模型还要好。
这项工作的重点是使用更多的训练数据,在不同的推理预算内训练一系列模型,使其达到最佳性能,并且对比现有的 LLMs 的性能。比如 LLaMA-13B 在大多数benchmarks 测试中性能优于 GPT-3,而参数量减小了 10x 以上。LLaMA-65B 模型则可比肩目前最好的大模型如 Chinchilla、PaLM-540B。
训练方法预训练数据预训练数据如下表:除了Wikipedia & Books 用了2个epoch,其它都只用了1个epoch
...
C++ 函数实现的异常覆盖
Android NDK 有一些巨坑,编译链接没什么问题,运行时出错,而且非常难查。比如声明有返回值的函数实现漏写return语句, 会导致函数调用之后跑飞,x86不会有问题。最近遇到另外一个巨坑,采用静态链接第三方库,如果有同名函数,即使是函数签名不同,函数实现会被覆盖,也就是调用到的是第三方库实现,本地实现被覆盖掉, OMG~~~~
编译环境:Host: MacOSTarget: Android NDKr20ToolChain: bazelLink: Static Library
动态链接会报同名函数重定义错误~~ 该问题仅限于静态链接
本地函数声明如下,
123456789101112#ifdef __cplusplusnamespace libfcc {extern "C" {#endifLIBFCC_APIint I420ToNV12(const u8 *src_i420, u8 *dst_nv12, int width, int height);#ifdef __cplusplus} // extern "C& ...
Android Camera HAL 新架构
我们也把 Camera 拆分成 三驾马车 来看:App Framework, CameraService, Camera HAL
前面两个是 Android AOSP 代码,随着 Android 系统升级会持续更新,包含在 system.img 里面,同时 Java 部分接口也会包含在 Android SDK 一起发布。
随着 Android 8.0 的 Treble 架构发布,相当于是把三驾马车里面的前两架放到了 system.img 里面,一起随着 Android 系统升级更新,而最后一个则独立拆分出来,不仅仅是放到了新的进程里面,而且在手机系统上要求放到 vendor 分区,这样可以各自独立升级。
三驾马车先附上 Google 官方图例:
App Framework 部分是最上层部分,包括 Java & C++ 代码,实现了 Android Camera2 API 接口,提供给 android 应用使用,Java 部分包含在 Android SDK 里面。
source tree
Java 实现:
https://android.googlesour ...
Android 外接 USB 摄像头
如前述文章所述,Google 在 Android P 上提供了对 usb camera 设备的支持,官方叫法是 External USB Cameras ,提供了完整 HALv3 实现并接入到 CameraProviderManager;可以让任何三方相机应用轻松调用到外接 USB 摄像头功能,而且使用方法跟内置相机几无差别,都是透过 Android Camera API2 调用。
遗憾的是该功能默认关闭,并且 OEM 厂商大概率也会去改 AOSP 代码,比如 multi-caemra,SAT 等功能的实现,有可能会对其造成影响。
这篇文章详述如何开启 Android 手机上原生支持 USB 外接摄像头这个功能。因为底层走 V4L2 接口,所以支持 UVC 驱动的视频设备都能支持,包括常见的单反,微单,PC 机用的 usb 摄像头,网络摄像头等等,应用非常广泛。
目前看网络上还没有这方面的相关资料,一些嵌入式设备可能有类似的功能实现 (基于 Linux 或 Qt),基于 android 系统开发的也有可能是直接使用这套方案的。当然也可以实现自己的 HAL 模块并接入 Android C ...
