Introduction Transformer Model From Math Perspective
ReadMore - Introduction Transformer Model from Math Perspective BY CHENFENG ([email protected])
ReadMore - Introduction Transformer Model from Math Perspective BY CHENFENG ([email protected])
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 ...
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,这样我们就可以控制数以万计的机器人来完成任务,并且他们能很好的理解和帮助人类。
Coral生态以及技术 References: Coral AI 介绍下google coral edge TPU computing整个生态: 用于生产环境的SoM以及带PCI接口的加速器。 用于开发测试的四款口袋型开发板。 外围传感器包括环境检测模块以及摄像头,Wi-Fi/PoE扩展板。 Cloud TPU / Edge TPU 介绍 技术 Coral Edge TPU是谷歌为加速边缘设备神经网络推理而研发的专用芯片,并且在保持低功耗的前提下运行专门优化过的神经网络模型。 Edge TPU 运行速度为4 Tops,并且功耗为0.5W/Tops,相当于如果Edge TPU全天满负荷运行,那么一天的功耗总共为48WH,这样对于工业环境的要求,低功耗绝对是一个优势。上图为嵌入式CPU和Edge TPU推理速度的比较,可以看出在edge TPU上运行时间远远低于embedded cpu,降低功耗但保持模型推理的准确度并且加速运算,这就是edge tpu在工业领域的优点。 可扩展性 Coral产品线包括最初的原型设计开发板,到产品PCI edge TPU模块,最后再到微控制器micro dev board,整个生态链都有供应,缺点就是由于芯片限制的原因在中国很难买到,国外因为生产原因的关系,也需要时刻关注供应商的库存。像我之前购买的Environmental Sensor Board是通过HK代购进入中国的,还有micro dev board是通过pi3g供应商从EU发货到达国内的。 模型兼容 edge TPU可以运行tensorflow以及keras构建的模型,当然模型需要转换成int8 tensorflow lite ,这一步称之为quantized,这样就可以降低模型在edge device上内存的开销,然后tflite模型通过edge tpu compiler的编译,最后运行在edge tpu上。 Mendel Linux Coral Dev Board和Coral Dev Mini Board以及SOM都可以运行google自己维护的Mendel Linux,系统的缺点就是独立性太强,使用的linux内核是4.x系列,比起raspberry pi生态,coral的内核已经相当老旧了,并且无法使用linux内核的新功能,而像raspberry pi官方一直支持Linux内核到6.x系列。在编程接口方面,google提供了,pycoral + libcoral,还有shell命令行工具MDT。 Coral Micro ...
OpenAI ChatGPT Reference DeepMind Reference InstructGPT Reference 最近看到推特上聊的最多的话题是ChatGPT,很多人对它赞不绝口。对于一个创作者而言将人工智能用于自己的创作流程中,能够快速实现作品的原型,这在商业领域当然是一件很好的事情。chatGPT可以给编剧增加灵感,给找问题的人提供解决思路,给翻译人员提供更精准的语言翻译帮助。那么ChatGPT算不算真正意义上的AI,也就是说它能否通过图灵测试。虽然我们不知道答案,但我们可以确定ChatGPT肯定收集了海量的互联网数据来进行模型训练,最后模型的参数也是惊人的巨大。 首先参考OpenAI官网,我们看下OpenAI模型训练的过程: 训练模型采用了Reinforcement Learning From Human Feedback,首先OpenAI从题词数据库里面抽取样本,标记者会解释该问题的预期答案,然后将样本和预期答案通过GPT-3.5模型进行监督学习(A模型),然后收集对比数据,通过人工的方式将问题得到的多个答案进行排序打分,以此训练奖励模型(B模型),最后输入新的词条到A模型,其输出进入B模型中得到奖励评分,采用PPO方法优化A模型的参数。 我门再来看下OpenAI的DALL-E 2,通过语言描述来生成照片级的图像,当然还有开源版本的Stable Diffusion v2,也是类似的功能。其中采用的机器学习模型是diffusion models,通过连接语言描述与图像之间的关系,从无到有生成一张符合描述的完整的高分辨率图像,这也许在2D图像处理和3D模型制作中给创作者提供很大的帮助。 受到DALL-E工具的启发,Baker Lab的研究人员使用diffusion models来生成新的蛋白质结构,A diffusion model for protein design,通过新的方法研究人员能够快速的组装出具有功能性的蛋白质结构,而在使用diffusion models之前需要通过数以万计的分子进行测试。从文本生成,到文本图像生成,再到蛋白质结构生成,这里面涵盖了通用的模型设计,那么这些模型能否被称之为通用AI,不谈论创造性,我们可以将chatGPT理解为狭义通用AI,因为它的目标就是模仿人类,给出的答案尽量接近人类,比如一个智能搜索引擎,一个开放式的智能数据库,那么能否通过图灵测试,我猜测是不可能。 有了这么多具有启发性的应用之后,我们想象建立一个DeepL-Ops领域,为了保证生产环境的稳定性,我们会有一个chaos agent一直在搞破坏,比如关闭集群的某些服务,极度消耗服务器的网络流量,假装破坏硬盘,之后如果系统还可以正常对外工作,那么这个系统就是可靠的,这项工作我们称之为混沌工程。这里会出现一个问题,工程师无法100%去列举出哪些问题会导致服务异常,需要不断的依靠实际经验去积累,这样我们也就引入了DeepL-Ops训练机制。系统中存在一个chaos agent和一个order agent,前者是搞破坏使得系统故障,后者是修复系统使得系统正常工作,我们设计了一个机器学习模型,当chaos agent搞破坏的时候,order agent去努力修复系统,同时chaos agent也在进化,尽可能的破坏系统让order agent无法修复,如果order agent无法修复系统,agent会根据环境给予的反馈调整order rules generator模型,如果order agent修复了系统,chaos agent会根据现有环境更新chaos rules generator模型。当该模型训练完成之后我们把order agent放到系统中,当系统出现故障时,我们将故障信息输入到order rules generator模型中,从而让order agent去修复系统问题。
论文 Deep Learned Super Resolution for Feature Film Production 学习 最近我一直在学习三维建模渲染和制作,看到一篇关于Pixar在2020年发布的论文,主要内容是关于Pixar内部的工程师开发人员如何利用深度学习来提升渲染图像的分辨率,精细的渲染一帧4k图像可能会消耗很多资金成本,如果最终渲染2k分辨率的图像然后利用深度神经网络将其提升到4k,图像在细节上更加细腻和丰富,那么在渲染的成本上可以帮助公司降低很多成本。和以前的超图像超分辨率提升模型不一样,电影工业通常使用的图像都包含有光照的高动态范围,和对色彩的真实还原的数据,这就使得目前的主流超分辨率模型根本无法使用在电影领域。这也是我目前感兴趣的领域,因为将深度学习用于工业领域比起理论上更加具有实际意义。 摘要 伸缩技术通常用于创建那些成本高昂甚至无法制作的高分辨率图像。近年来,深度学习方法相比传统的方法而言在改善图像细节,提升图像清晰度方面有所改善。在这里我们讨论将深度学习的超分辨率技术用于皮克斯电影工业的动机和挑战,使用该技术可以降低渲染农场的支付成本,同时实现生成高分辨率的内容。 背景和相关工作 为了提高图像的分辨率,通常使用几种技术,如 nearest-neighbor, bilinear,以及bicubic interpolation。在电影业中,通过Nuke节点TVIScale,total variation inpainting技术已被证明在提高分辨率方面很有成效。近年来,深度卷积神经网络通过从大量数据中学习低分辨率(LR)到高分辨率(HR)的映射,展示了更高的重建质量。随着生成式对抗网络(GANs)和感知损失函数在开创性的SRGAN工作中的引入,伸缩器现在可以产生与真实相比无法分辨的细节和清晰度的图像。我们在皮克斯工作的目的是将GANs投入生产,用于图像的分辨率伸缩。 训练集 训练一个超分辨率模型需要成对的高分辨率和低分辨率帧图像。大多数先前的研究依赖于预先建立的数据集,这些数据集由代表HR(High Resolution)的高分辨率照片和通过采用下采样操作(通常是bicubic)获得的LR(Low Resolution)照片组成。然而,在我们的测试中,在bicubic降采样图像对上训练生成的预训练超级分辨率模型并不能推广到新的数据上(即没有新的细节被生成),因为现实世界的降级操作比Bicubic降采样要复杂得多。在皮克斯,我们有一个渲染器来合成图像对,有高质量的场景(有不同的着色器、几何和光照条件),还有一个经过微调的数据中心来进行大规模的渲染。 为了获得训练数据,我们使用RenderMan渲染了分辨率为1-2K的生产图像对,其中的镜头从《Coco》、《Incredibles 2》、《Toy Story 4》、《Onward》和《Soul》中随机抽取。由于一个给定的镜头中包含多个通道(如实体元素、体积和天空),在生产管道的最后步骤进行合成,我们收集所有的元素,不包括Deep Layer。我们对已知的与分辨率有关的参数进行修正,如微多边形长度和相机射线差倍率。尽管如此,我们仍然偶尔会注意到不相关的对,并将它们从训练集中排除。我们注意到,我们经常不能重新使用以前定稿的2K渲染图,因为即使在定稿后,由于生产的变化,镜头也经常发生变化。我们还从UHD版本中获得预先存在的4K渲染图,并将任何连贯的2K-4K对添加到数据集中(通常每个节目的一小部分是以4K渲染的,其余的是用TVIScale从2K放大的,因为大规模4K渲染的成本很高)。我们最终得到了一个包含3700对的数据集。 训练管线 我们在文献中观察到,最先进的超分辨率深度学习模型是使用具有对抗性训练的深度残差网络[Wang et al. 2018]。架构或损失函数的微小差异使这些模型与众不同。我们从一个开源的训练环境和网络架构开始,然后我们创建了一个PyTorch开发环境,并准备了一个台带有两个24GB NVIDIA Quadro P6000 GPU的Linux实例。 生产线特点 大多数超分辨率的工作没有考虑到高动态范围HDR图像,但这样做在电影行业是至关重要的。HDR数据通常用超过1的浮点数表示,并存储在OpenEXR这样的文件格式中。由于神经网络在处理输入数据时将其归一化为[-1, 1]或[0, 1]时表现最好,我们就应用以下范围压缩函数来适应HDR数据[Bakoetal.2019]:Ty =k*log(1+μy)/log(1+μ)。我们设置k=0.6和μ=5000,提供范围到亮度值接近300。然后,我们将压缩数据集转换成一个高性能的数据结构,即闪电内存映射数据库,比直接读取EXR图像的训练速度加快了约1/3。 我们试验了一种新的数据增强策略,即在(LR,HR)对中引入随机颜色移动,使网络对不同的光照条件更加精准。我们通过添加一个随机颜色(cr, cg, cb )∈ [-0.01, 0.01],给每个颜色通道添加变换:R’=R+cr, G’=G+cg, B’=B+cb。我们发现这提高了模型的泛化能力。 一个关键的挑战是解决生成的图像中不需要的颜色偏移。我们引入了一个额外的损失项,对下采样生成的图像和输入的LR图像之间的l1损失进行惩罚。有了这个额外的损失项,我们在训练的网络输出中没有发现任何颜色的偏移。我们进行了超参数调整实验,以最大限度地提高合成图像的清晰度,同时避免通常伴随着GANs的过度噪音伪影。我们最新训练的网络偶尔会在文本上产生边缘伪影(如片尾字幕),我们预计获得更多带有文本的训练数据将有助于消除这些伪影。纯PSNR网络(无GAN)不会产生边缘或噪音伪影,但会模糊一些高频细节,如胶片颗粒或小亮点。 我们的网络用纯PSNR损失项预训练了215k次,然后用GAN、色移损失和感知(特征)损失项训练了340k次。我们根据强度使用192x192的卷积核进行采样,最小批次为20。损失项的权重是{PSNR, colorShift, feature, GAN}={1, 5, 0.1, 0.0005}。我们的训练时间为:仅PSNR为108小时,GAN为208小时(总训练时间为316小时)。我们在GPU上正向推演从2K到4K图像的转换时间约为15秒,我们强调该模型可以在任何输入分辨率下提升分辨率(受GPU/CPU内存限制)。在开发的后期,我们开始在英伟达的DGX2超级计算机上进行训练,这使训练速度加快了5倍左右,并能同时运行多个实验。 结果 我们已经训练并部署了一个生产质量的超分辨率模型,在大多数情况下,特别是在TVIScale合成的细节不足和需要4K渲染的情况下,能够持续产生高质量、无伪影的高分辨率图像。即使在有景深、运动模糊和/或体积的场景中,质量也是一致的,因为这些现象在训练集中都有体现。Onward UHD光盘的元素用我们的模型进行了升级,并计划在Soul上进行更广泛的使用。我们的工作正在积极测试其他的使用情况,如宣传工作和主题公园的交付产品。此外,我们最新的训练模型显示,我们有希望建立一个可以在1K下渲染并提升为2K的工作管道,如果用于所有的中间渲染,这将为工作室节省50-75%的渲染场占用空间。 未来的工作 我们的超分辨率模型只支持RGB颜色通道的单帧升频,这使得我们的工作只在工作管道的末端有用。对于在中间渲染中的使用,需要对阿尔法通道进行伸缩,鉴于预先训练的判别网络通常只支持RGB,这就不是一件简单的事情。虽然我们目前的模型产生了时间上的一致性结果,但没有像[Bako等人,2017]那样吸收跨帧输入,这样做对我们来说仍有帮助。我们预计考虑到辅助特征缓冲区,如法线和反射率,将进一步提高合成图像的质量。此外,我们预计我们的训练时间和推理速度将随着网络量化和修剪而提高。最后,虽然我们到目前为止一直专注于2倍放大,但4倍放大在之前的工作中已经显示出巨大的前景,并可能有助于高分辨率的宣传片的渲染和为最近进入市场的8K电视提供内容。为此,在我们的测试中,运行2倍网络的多个通道已显示出潜力。 引用 Steve Bako, Mark Meyer, Tony DeRose, and Pradeep Sen. 2019. Offline Deep Importance Sampling for Monte Carlo Path Tracing. In Computer Graphics Forum, Vol. 38. Wiley Online Library, 527–542. ...
考虑工作时的效率,以及自己在英语方面的技能不是非常扎实,调研了使用DeepL完成官网以及日常博客的翻译工作。 免费版的DeepL有很多限制,在国内购买付费版本的DeepL Pro时,DeepL官网为支持中国🇨🇳地区,解决方案是使用虚拟VISA服务,可以去这里了解具体办理过程。 特性 官网称是全世界最好的机器翻译,可能是使用自己研发的神经网络,提高了翻译的准确率。 翻译完整的文档。 API功能和CAT翻译集成 入门版本价格: $6.99/月 入门版功能: 无限量文本翻译 数据安全 翻译完整文档 <= 5/月 正式非正式语气词 术语表,不限条目 备注 使用易购卡完成支付。
架构
NVIDIA CLARA DISCOVERY 生态 Nvidia进军医疗领域,从封面我们可以看到一个环状结构: 自然语言 -> 病毒基因序列 -> 病毒蛋白质结构 -> 新药物与病毒蛋白质对接 -> 分子对接动力学模拟 -> 候选药物临床试验检测病人肺部医疗影像 -> 自然语言 简介 在Nvidia GTC 2020秋季大会上,Nvidia发布了NVIDIA CLARA DISCOVERY 药物研发框架,目的就是加速全球药物研发的进度,之前Nvidia收购ARM的消息,我就意识到未来Nvidia有想要统治边缘计算领域的野心。不出所料,这次GTC发布会上Nvidia更新了很多产品线,包括大到数据中心的计算模块BlueField-2,小到边缘领域jetson Nano 2G,最让我激动的还是CLARA DISCOVERY,因为自己短期的目标就是如何将边缘计算用于医疗领域,比如个人可以通过边缘计算设备结合自己从医院检查获得的诊断数据来计算出自身疾病的现状,还有对Covid-19 CT,ChestXRay的判断检测。 是什么 Clara Discovery 集成了很多框架和应用,包括基因序列分析,蛋白质对接和结构预测,分子动力学模拟,医学图像识别和分割,自然语言处理。 基因序列生成 NVIDIA Clara Parabricks Collection 图像处理 NVIDIA Clara Imaging 蛋白质结构 RELION MELD 分子动力学模拟 GROMACS VMD NAMD 重点 NVIDIA Clara Imaging 主要分为两部分: Clara Train SDK -> 用于训练模型 架构图: Getting started with Clara Train SDK Clara Deploy Bootstrap -> 将模型部署到kubernets集群中 ...