My Tasks Plan

任务队列 如何建立一个任务跟踪计划,这个问题一直困扰着我,最近因为生活上碰到的事情,很多之前建立的学习任务计划现在都延期了,所以自己在寻找一种方案,如何安排好自己的计划,不管是项目还是学习都要有一个最终期限,不能因为其他的事情,而将原本定义好的最终期限拖延至无法预期的状态,做一件事务,起草一项计划,看一本书,我们都需要事先建立好计划,充分利用时间,这个页面就是用于展示任务进度,队列中都展示了自己目前在做的事情的计划和状态。 查看我的计划

December 22, 2021

2023 New Plans

往MLOps方向探索 练习小提琴,争取今年能够演奏巴赫的恰空舞曲 每一个月读一本书 长途旅游一次

January 5, 2023

ROBOMASTER DEVELOPMENT BOARD FLASH UNDER LINUX

ReadMore - ROBOMASTER DEVELOPMENT BOARD FLASH UNDER LINUX BY CHENFENG ([email protected])

February 26, 2024

Introduction Transformer Model From Math Perspective

ReadMore - Introduction Transformer Model from Math Perspective BY CHENFENG ([email protected])

October 2, 2023

Kinematic Model of Mecanum Wheel

ReadMore - Kinematic Model of Mecanum Wheel BY CHENFENG ([email protected])

September 5, 2023

Creativity Need to Cross Boundaries

Bambu Lab 最近因为我需要给Robomaster EP安装Intel Realsense D435i用于Vision SLAM,所以需要自制安装配件,于是我决定动手使用3D打印来完成。虽然我手头有一台五年前购买的overlord pro,但是由于机器年事已高,我需要手动对这台打印机进行性能上的优化和调整,考虑到时间成本问题,我决定重新购买一台3D打印机用于配件的打印,这台overlord pro后面有时间再进行维修。 经过不断的调研我最后锁定了Bambu Lab X1 Carbon Combo,这台机器在3D打印领域是革命性的创作。经常玩3d打印的小伙伴肯定知道,当机器开启到模型制作完成,这过程中需要多次的人工介入检查,尤其重要的是对打印面板的调平,其中耗费的时间成本完全超过了打印的耗材成本,那么Bambu Lab就把3D打印中这些繁琐的人工干预问题全部自动化了,机器本身布满了很多传感器,带来了很多便利性,打印平台的调平,打印的首层检测,同时也用上了毫米激光雷达,通过机器内嵌的神经网络处理引擎来完成模型的首层质量检测,支持高速打印,尤其是比较大的模型,在100mm/s的机器上打印需要20个小时,而在x1 carbon上以500mm/s的速度打印只需要3个小时。当然还有Bambu Lab自研的AMS系统,可以支持自动换料,对于多色的3d打印非常友好。 通过Bambu Lab官方的blog,我了解到团队的创始人全部来自DJI,果然产品具有特别浓厚的DJI Style,尤其是用上了毫米激光雷达,基本上算是跨学科的研究团队。3D打印需要用到结构力学,机械动力学,流体力学,软件开发,他们离开大疆之后将这些技术应用到3D print的世界,于是就有了这一台创造性的X1 Carbon。 Blender CAD 为了设计符合现实世界精度的模型,我们需要使用精确建模,比较常见的建模工具比如fusion 360,我尝试在blender下做精确建模,于是找到了一个好用的工具CAD Sketcher。我用这个工具为Robomaster EP设计了很多扩展板,将raspberry pi,coral tpu,intel realsense集成到了robomaster ep上,这样小机器人就可以在室内完成自主定位和巡航了。

August 17, 2023

RUN LLaMA LLM on Raspberry Pi Cluster

MPICH Raspberry Pi Cluster 最早在Raspberry Pi集群上运行MPICH的项目应该是Raspberry Pi at Southampton,教授Simon Cox和他的儿子一起搭建由64个树莓构和乐高积木构成的MPI集群,这个项目已经是10年前的了,那个时候使用的是raspberry pi 1 B+,由于1代性能的限制,整个集群只能用于MPI学习,在高性能计算方面还是欠佳。然而现在raspberry pi 4虽然对比Intel服务器而言性能还是很弱,但是运行MPICH相关的计算项目比起1代还是非常有潜力的。首先是功耗方面,64块raspberry pi 4 CPU满载运行总功耗大概400多瓦左右,其次是ARM生态比起十年前现在已经非常完善,很多的程序都已经被移植到了ARM64平台上,各种各样的工具垂手可得。 最近比较出类拔萃的项目一定属于Meta LLaMA V2,在上一代模型的基础上,LLaMA 2 开放了商业使用许可,那么能否在raspberry pi 4 cluster上运行LLaMA 2 LLM 模型呢?项目llama.cpp已经给出了答案。llama.cpp将llama原生模型参数类型从float 16bit量化到int 4bit,从而使得大语言模型能够运行在消费级的CPU/GPU上。 Deployment LLaMA.cpp on raspberry pi k8s cluster 很早之前我在家里搭建了一套raspberry pi 4集群,节点规模在70台,并且目前还在运行中,集群采用k8s来进行管理,于是结合volcano,将llama.cpp部署在raspberry pi 节点上,节点间的共享存储我目前采用的是moosefs。 首先部署volcano,它相当于一个k8s任务调度器,可用于深度学习的分布式训练以及高性能的并行计算,部署可以参考volcano github 构建MPICH llama.cpp docker image FROM ubuntu:22.04 ENV DEBIAN_FRONTEND=noninteractive RUN apt update && apt upgrade -y && apt-get install build-essential gfortran make cmake wget zip unzip python3-pip python3-dev gfortran liblapack-dev pkg-config libopenblas-dev autoconf python-is-python3 vim -y # compile mpich WORKDIR /tmp RUN wget https://www.mpich.org/static/downloads/4.1.2/mpich-4.1.2.tar.gz RUN tar xf mpich-4.1.2.tar.gz RUN cd mpich-4.1.2 && ./configure --prefix=/usr && make -j $(nproc) && make install RUN rm -rf mpich-4.1.2.tar.gz mpich-4.1.2 # compile llama.cpp RUN apt install git -y WORKDIR / ENV LLAMA_CPP_GIT_UPDATE 2023-07-19 RUN git clone https://github.com/ggerganov/llama.cpp.git RUN cd llama.cpp && make CC=mpicc CXX=mpicxx LLAMA_MPI=1 LLAMA_OPENBLAS=1 RUN cd llama.cpp && python3 -m pip install -r requirements.txt RUN apt install openssh-server -y && mkdir -p /var/run/sshd ENV PATH=/llama.cpp:$PATH 运行MPI Job apiVersion: batch.volcano.sh/v1alpha1 kind: Job metadata: name: llama-mpi-job labels: "volcano.sh/job-type": "MPI" spec: minAvailable: 5 schedulerName: volcano plugins: ssh: [] svc: [] policies: - event: PodEvicted action: RestartJob tasks: - replicas: 1 name: mpimaster policies: - event: TaskCompleted action: CompleteJob template: spec: volumes: - name: mfs hostPath: path: /mfs type: Directory containers: - command: - /bin/sh - -c - | export MPI_HOST=`cat /etc/volcano/mpiworker.host | tr "\n" ","`; mkdir -p /var/run/sshd; /usr/sbin/sshd; sleep infinity; # please fill your llama mpich docker image that build in step 2. image: registry.cineneural.com/compile-projects/llama-cpp-arm64-cpu:ubuntu22.04 imagePullPolicy: Always name: mpimaster volumeMounts: - mountPath: /mfs name: mfs ports: - containerPort: 22 name: mpijob-port resources: requests: cpu: 2 memory: "2Gi" limits: cpu: "4" memory: "2Gi" restartPolicy: OnFailure - replicas: 10 name: mpiworker template: spec: volumes: - name: mfs hostPath: path: /mfs type: Directory containers: - command: - /bin/sh - -c - | mkdir -p /var/run/sshd; /usr/sbin/sshd -D; # please fill your llama mpich docker image that build in step 2. image: registry.cineneural.com/compile-projects/llama-cpp-arm64-cpu:ubuntu22.04 imagePullPolicy: Always name: mpiworker volumeMounts: - mountPath: /mfs name: mfs ports: - containerPort: 22 name: mpijob-port resources: requests: cpu: "2" memory: "2Gi" limits: cpu: "4" memory: "4Gi" restartPolicy: OnFailure 将llama 2模型文件转换到ggml bin # LLaMA 2 13B Chat Model python3 convert.py --outtype f16 /mfs/packages/Meta/LLaMA-v2-models/llama-2-13b-chat quantize /mfs/packages/Meta/LLaMA-v2-models/llama-2-13b-chat/ggml-model-f16.bin \ /mfs/packages/Meta/LLaMA-v2-models/llama-2-13b-chat/ggml-model-q4_0.bin q4_0 # LLaMA 1 7B Model python3 convert.py --outtype f16 /mfs/packages/Meta/LLaMA-v1-models/7B quantize /mfs/packages/Meta/LLaMA-v1-models/7B/ggml-model-f16.bin \ /mfs/packages/Meta/LLaMA-v1-models/7B/ggml-model-q4_0.bin q4_0 推理 kubectl exec -ti llama-mpi-job-mpimaster-0 bash # run command line in llama-mpi-job-mpimaster-0 container: mpirun -hostfile /etc/volcano/mpiworker.host -n 5 \ /llama.cpp/main \ -m /mfs/packages/Meta/LLaMA-v2-models/llama-2-13b-chat/ggml-model-q4_0.bin \ -p "please explain me the different between math and physical" -n 128 Chat with Raspberry Pi llama v1 7B mpirun -hostfile /etc/volcano/mpiworker.host \ -n 5 /llama.cpp/main \ -m /mfs/packages/Meta/LLaMA-v1-models/7B/ggml-model-q4_0.bin \ -p "I believe the meaning of life is" -n 128 ...

July 22, 2023

Compile Ros2 Humble for Raspberry Pi Zero W

问题 raspberry pi zero w 的系统目前树莓派官方推出的镜像是armv6hf debian 11,而ROS2官方只支持ubuntu debian aarch64,不支持arm32,所以要在raspberry pi zero w上使用ROS2必须从源码构建。那么问题就在于如果直接在zero w上编译,显然因为硬件的原因(cpu: 1 core, memory: 512M),编译将会极其缓慢,我也尝试使用armhf交叉编译工具链在aarch64系统上编译ROS源码,但是会出现系统库缺失问题。同时我还考虑到后续的开发环境和zero w原始系统环境的一致性问题,我决定采用zero w的原生debian 11 armhf系统做为rootfs,制作docker image,然后运行在aarch64系统上(比如树莓派4,jetson agx),这样编译出来的ros2直接可以运行在zero w上,并且运行环境和编译环境都是保持一致的,这样对后续的调优以及debug处理都会非常方便。 兼容性 raspberry pi zero w 使用的是cpu arm1176jzf-s,armv6版本,raspberry pi 4 使用的是 ARM Cortex-A72 ARMv8-A版本,我们可以从Cortex-A72文档中看出AArch32 for full backward compatibility with Armv7,也就是armv8 aarch32指令集兼容armv7 aarch32,同时armv7指令集兼容armv6,那么也就意味着armv6的二进制文件是可以直接在raspberry pi 4 aarch64上运行,反之aarch64 binary当然无法在armv6系统上运行,这样思路一下子清晰了,我们可以将armhf的根文件系统制作成docker image,运行在aarch64系统上,然后编译ros2,最后将编译产物拷贝到zero w上直接运行。 解决问题 command line run on raspberry pi 4 ubuntu 20.04 aarch64 os donwload rpi zero w image (raspios-bullseye-armhf-lite) ...

July 16, 2023

Robot使用GPT

reference wolframalpha-as-the-way-to-bring-computational-knowledge-superpowers-to-chatgpt chatgpt-gets-its-wolfram-superpowers what-is-chatgpt-doing-and-why-does-it-work Next-Generation Human-Robot Interaction with ChatGPT and ROS Dolly v2.0 原理构建 最近火热的chatgpt,将生成式人工智能推进到了一个新的高度,但是目前看到大部分的人都将其应用于聊天工具,甚至还有人用它当维基百科使用,但是我觉得既然是生成式的,为什么不用做人与机器人之间的交互,我们使用特定的自然语言描述需要让机器人做的操作,chatgpt通过理解我们的自然语言,将其翻译成类似程序源码的结构化语言,然后输入到机器人的系统中,机器人操作系统会按照输入的结构化语言去完成对应的操作。所以我就在思考如何将RoboMaster EP结合LLM语言类模型来完成人类与机器人之间的交互。像chatgpt这样的API应用有一个弊端,因为它的模型是运行在云端的,并且对某些国家以及地区有限制,所以要做成商业化的工业LLM应用基本上可以排除掉,我希望模型能够运行在本地,并且能够自己去训练优化模型,这个时候Databricks发布了Dolly v2.0模型,数据集以及训练模型全部开放源码,可以应用于商业领域,看了相关介绍之后我决定使用dolly v2.0做为本地LLM模型的首选。 以上的整套系统都是基于ROS2(Robot Operating System)构建,Dolly以及Whisper模型都会运行在本地服务器上,这样我们就可以在本地快速的搭建和实现Robot with GPT原型。 Kubernetes + ROS2 + GPT + Whisper 设想我们在云端有一套kubernetes基础设施,现在我们要在远程的机器人上运行像chatGPT一样的模型,问题的关键在于机器人本身的硬件设备是没有能力运行chatGPT这样的模型的,解决方案就是将模型运行在云端,机器人通过高速互联网络去使用chatGPT,在云端我们通过kubernetes来分配和调度模型运行的资源环境,比如给模型分配TPU或者GPU资源用于推理,而连接机器人和云端的操作系统就是ROS2.0,这样我们就可以控制数以万计的机器人来完成任务,并且他们能很好的理解和帮助人类。

May 6, 2023