任务队列 如何建立一个任务跟踪计划,这个问题一直困扰着我,最近因为生活上碰到的事情,很多之前建立的学习任务计划现在都延期了,所以自己在寻找一种方案,如何安排好自己的计划,不管是项目还是学习都要有一个最终期限,不能因为其他的事情,而将原本定义好的最终期限拖延至无法预期的状态,做一件事务,起草一项计划,看一本书,我们都需要事先建立好计划,充分利用时间,这个页面就是用于展示任务进度,队列中都展示了自己目前在做的事情的计划和状态。 查看我的计划
2023 New Plans
往MLOps方向探索 练习小提琴,争取今年能够演奏巴赫的恰空舞曲 每一个月读一本书 长途旅游一次
ROBOMASTER DEVELOPMENT BOARD FLASH UNDER LINUX
ReadMore - ROBOMASTER DEVELOPMENT BOARD FLASH UNDER LINUX BY CHENFENG ([email protected])
Introduction Transformer Model From Math Perspective
ReadMore - Introduction Transformer Model from Math Perspective BY CHENFENG ([email protected])
Kinematic Model of Mecanum Wheel
ReadMore - Kinematic Model of Mecanum Wheel BY CHENFENG ([email protected])
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上,这样小机器人就可以在室内完成自主定位和巡航了。
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 ...
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) ...
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,这样我们就可以控制数以万计的机器人来完成任务,并且他们能很好的理解和帮助人类。