Ubuntu下python3.12安装, 分布式 LLM 推理 exo 安装调试过程, 运行自己的 AI 集群
创作不易 只因热爱!!
热衷分享,一起成长!
“你的鼓励就是我努力付出的动力”
—调试有点废,文章有点长,希望大家用心看完,肯定能学废,感谢.
1. Ubuntu下python3.12安装
1.1 导入 Python 的稳定版 PPA,不用编译
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update
1.2 安装python3.12
sudo apt install python3.12 python3.12-venv python3.12-dev python3.12-distutils# sudo apt install python3.12-full # 或可使用这个全安装
1.3 配置选择python3的使用,随时切换使用版本
ls /usr/bin/python*
root@lucky-ubuntu2204:~/pythonpro# ls /usr/bin/python*
/usr/bin/python3 /usr/bin/python3-config /usr/bin/python3.12 /usr/bin/python3.10
###如上结果显示有py3.10, py3.12.sudo update-alternatives --list python3
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.12 1
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.10 2
sudo update-alternatives --config python3 #切换使用的版本,根据提示选择
python3 -V # 查看选择后的使用版本
切换python版本运行过程结果如下
root@lucky-ubuntu2204:~/pythonpro# sudo update-alternatives --list python3
update-alternatives: error: no alternatives for python3
root@lucky-ubuntu2204:~/pythonpro# sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.12 1
update-alternatives: using /usr/bin/python3.12 to provide /usr/bin/python3 (python3) in auto mode
root@lucky-ubuntu2204:~/pythonpro# sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.10 2
update-alternatives: using /usr/bin/python3.10 to provide /usr/bin/python3 (python3) in auto mode
root@lucky-ubuntu2204:~/pythonpro# sudo update-alternatives --config python3
There are 2 choices for the alternative python3 (providing /usr/bin/python3).Selection Path Priority Status
------------------------------------------------------------
* 0 /usr/bin/python3.10 2 auto mode1 /usr/bin/python3.12 1 manual mode2 /usr/bin/python3.10 2 manual modePress <enter> to keep the current choice[*], or type selection number: 1
update-alternatives: using /usr/bin/python3.12 to provide /usr/bin/python3 (python3) in manual mode
root@lucky-ubuntu2204:~/pythonpro# python3 -V
Python 3.12.4
1.4 pip3.12的安装
# sudo apt install python3-pip # 不推荐使用这个安装,会导致后续pip关联原有py3.10版本的程序wget https://bootstrap.pypa.io/get-pip.py
python3 get-pip.py
同样查看本地的pip版本
ls /usr/bin/pip*# 安装后本地没有,于是创建软链接
which pip # 找到pip安装后位置
ln -s /usr/local/bin/pip /usr/bin/pip
# 设置pip的国内访问镜像
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
Tips :过程可能有错误提示如下
ModuleNotFoundError: No module named 'apt_pkg'
No module named ‘apt_pkg’ 解决方法:
cd /usr/lib/python3/dist-packages
sudo cp apt_pkg.cpython-310-x86_64-linux-gnu.so apt_pkg.so
2. 安装调试使用,分布式推理exo
2.1.创建venv环境,激活环境安装exo
python3 -m venv .venva
source .venv/bin/activate
git clone https://github.com/exo-explore/exo.git
# git clone https://gitdl.cn/https://github.com/exo-explore/exo.git
# git地址前加https://gitdl.cn/,这样的方法访问是加速git访问cd exo
python3 -m pip install -e .
Tips: 如果报错tinygrad无法安装,可以先git安装tinygrad.
# python3 -m pip install tinygrad # 报错,github访问慢cd .. #先返回上层目录
git clone https://gitdl.cn/https://github.com/tinygrad/tinygrad.git
cd tinygrad
python3 -m pip install -e .
cd ../exo #安装完返回exo目录
sudo vi setup.py # 编辑安装, 注释掉 tinygrad, 保存退出再安装
python3 -m pip install -e .
cd .. #返回上层目录
2.2.下载Meta-Llama-3-8B
# source .venv/bin/activate # 重新激活环境,如已退出venv环境export HF_ENDPOINT=https://hf-mirror.com
export HF_HUB_ENABLE_HF_TRANSFER=1
huggingface-cli download --local-dir-use-symlinks False --resume-download bofenghuang/Meta-Llama-3-8B --local-dir /root/.cache/tinygrad/downloads/llama3-8b-sfr
确认离线文件目录:
/root/.cache/tinygrad/downloads/
确认有llama3-8b-sfr文件夹:
/root/.cache/tinygrad/downloads/llama3-8b-sfr/
并且此llama3-8b-sfr内有以下文件:
model.safetensors.index.json,
llama3-8b-sfr/tokenizer.model,
llama3-8b-sfr/model-00001-of-00004.safetensors,
llama3-8b-sfr/model-00002-of-00004.safetensors,
llama3-8b-sfr/model-00003-of-00004.safetensors,
llama3-8b-sfr/model-00004-of-00004.safetensors
2.3.运行 exo 及调试
sudo apt install clang -y # 安装使用CPU推理
# source .venv/bin/activate # 重新激活环境,如已退出venv环境
DEBUG=9 python3 exo/main.py
运行后如下图:

2.3.1 或使用huggingface.co的镜像站hf-mirror.com运行
HF_ENDPOINT=https://hf-mirror.com DEBUG=9 python3 exo/main.py
2.3.2 或使用离线模式运行
HF_HUB_OFFLINE=1 DEBUG=9 python3 exo/main.py
Tips: 本地运行, 修改路径下文件 exo/api/chatgpt.py
.from_pretrained("/root/.cache/tinygrad/downloads/llama3-8b-sfr", local_files_only=True)
2.3.3 本地运行修改内容, 如图:

2.3.1 运行报错subprocess.CalledProcessError: clang
clang returned non-zero exit status 1.错误内容如下:
subprocess.CalledProcessError: Command '['clang', '-include', 'tgmath.h', '-shared', '-march=native', '-O2', '-Wall',
'-Werror', '-x', 'c', '-fPIC', '-', '-o', '/tmp/tmp920xv7jw']' returned non-zero exit status 1.
按Ctrl + C 手动终止运行
调试修改文件tinygrad/tinygrad/runtime/ops_clang.py运行后
vi tinygrad/tinygrad/runtime/ops_clang.py
######### 修改
# try:
# subprocess.check_output(['clang', '-include', 'tgmath.h', ...
# except subprocess.CalledProcessError as e:
# print(src)
# print(e)
#########
HF_HUB_OFFLINE=1 DEBUG=9 python3 exo/main.py
调试ops_clang.py运行结果如下:
print(src)==>
void E_4194304_4(__fp16* restrict data0, const __bf16* restrict data1) {
for (int ridx0 = 0; ridx0 < 4194304; ridx0++) {
int alu0 = (ridx0*4);
int alu1 = (alu0+1);
int alu2 = (alu0+2);
int alu3 = (alu0+3);
__bf16 val0 = data1[alu1];
__bf16 val1 = data1[alu2];
__bf16 val2 = data1[alu3];
__bf16 val3 = data1[alu0];
data0[alu1] = (__fp16)(val0);
data0[alu2] = (__fp16)(val1);
data0[alu3] = (__fp16)(val2);
data0[alu0] = (__fp16)(val3);
}
}
print(e) ==>
__bf16 is not supported on this target
按Ctrl + C 手动终止运行
定位到问题在这里
subprocess.check_output(['clang', '-include', 'tgmath.h', '-shared', '-march=native', '-O2', '-Wall', '-Werror', '-x', 'c', '-fPIC', '-o', '/tmp/tmp7weyfuio'], input=src.encode('utf-8'))
把以上src的内容存入 /tmp/tmp1234, 直接运行clang如下
root@lucky-ubuntu2204:~/pythonpro/exo/exo/inference# clang -include tgmath.h -shared -march=native -O2 -Wall -Werror -x c -fPIC -o /tmp/tmp4321 /tmp/tmp1234
/tmp/tmp1234:1:48: error: __bf16 is not supported on this target
void E_4194304_4(__fp16* restrict data0, const __bf16* restrict data1) { ^/tmp/tmp1234:7:5: error: __bf16 is not supported on this target __bf16 val0 = data1[alu1]; ^/tmp/tmp1234:8:5: error: __bf16 is not supported on this target __bf16 val1 = data1[alu2]; ^/tmp/tmp1234:9:5: error: __bf16 is not supported on this target __bf16 val2 = data1[alu3]; ^/tmp/tmp1234:10:5: error: __bf16 is not supported on this target __bf16 val3 = data1[alu0]; ^/tmp/tmp1234:11:27: error: cannot type-cast from __bf16 data0[alu1] = (__fp16)(val0); ^~~~~~/tmp/tmp1234:12:27: error: cannot type-cast from __bf16 data0[alu2] = (__fp16)(val1); ^~~~~~/tmp/tmp1234:13:27: error: cannot type-cast from __bf16 data0[alu3] = (__fp16)(val2); ^~~~~~/tmp/tmp1234:14:27: error: cannot type-cast from __bf16 data0[alu0] = (__fp16)(val3);
^~~~~~9 errors generated.
### 找了一下原因,__bf16 is not supported on this target意思是###
### CPU太老了,需要支持AVX512才可以运行.CPU是i3-8100无法使用.###
### 于是更换安装显卡CUDA ###
2.3.2 ubuntu安装显卡CUDA驱动
也可以上官网https://developer.nvidia.com/cuda-toolkit-archive查找安装CUDA驱动.

sudo apt install nvidia-cuda-toolkit
nvcc --version # 安装完成,查看CUDA
root@lucky-ubuntu2204:~/pythonpro/exo# nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2021 NVIDIA Corporation
Built on Thu_Nov_18_09:45:30_PST_2021
Cuda compilation tools, release 11.5, V11.5.119
Build cuda_11.5.r11.5/compiler.30672275_0
更换加速器可以在调试前写入
HF_HUB_OFFLINE=1 CUDA=1 DEBUG=9 python3 exo/main.pyHF_HUB_OFFLINE=1 GPU=1 DEBUG=9 python3 exo/main.py
tinygrad支持的加速如下
GPU (OpenCL) # sudo apt install opencl-headers ocl-icd-opencl-dev -y CLANG (C Code) # sudo apt install clang -y #CPU,x86需支持AVX512 LLVM METAL CUDA # 安装CUDA驱动 AMD # amd_comgr NV


!!!总之, 过旧的设备及CPU无法支持分布式 LLM 推理,如果拥有各种高端设备, 比如有以上加速器的各设备(iPad,Mac,较新的至强CPU电脑,有较显卡电脑,等等), 建立运行自己的 AI 集群才有可能.!!!
但行好事,莫问前程!
end
**你好呀,我是一个医信行业工程师,喜欢学习,喜欢搞机,喜欢各种捣,也会持续分享,如果喜欢我,那就关注我吧!**
往期精彩:
[AI]在家中使用日常设备运行您自己的 AI 集群.适用于移动、桌面和服务器的分布式 LLM 推理。
作者|医信工程师随笔|Carltiger_github
图片|自制|侵删
关注我,我们共同成长
“你的鼓励就是我分享的动力”
相关文章:
Ubuntu下python3.12安装, 分布式 LLM 推理 exo 安装调试过程, 运行自己的 AI 集群
创作不易 只因热爱!! 热衷分享,一起成长! “你的鼓励就是我努力付出的动力” —调试有点废,文章有点长,希望大家用心看完,肯定能学废,感谢. 1. Ubuntu下python3.12安装 1.1 导入 Python 的稳定版 PPA,不用编译 sudo add-apt-repository ppa:deadsnakes/ppa sudo…...
pytest-bdd 行为驱动自动化测试
引言 pytest-bdd 是一个专为Python设计的行为驱动开发(BDD)测试框架,它允许开发人员使用自然语言(如Gherkin)来编写测试用例,从而使测试用例更易于理解和维护。 安装 通过pip安装 pip install pytest-b…...
PostgreSQL11 | 触发器
本文章代码已在pgsql11.22版本上运行且通过,展示页由pgAdmin8.4版本提供 上一篇总结了原著的第十章有关pgsql的视图的用法,本篇将总结pgsql的触发器的用法。 触发器 使用触发器可以自动化完成一些在插入数据或修改数据时,某些需要同期同步的…...
cesium canvas广告牌
在有些业务中,对场景中的广告牌样式要求比较高,需要动态显示一些数据,这个时候,我们可以通过将复杂背景样式制作成图片,通过canvas绘制图片和动态数据,从而达到比较好的显示效果。 1 CanvasMarker 类封装 …...
使用Floyd算法求解两点间最短距离
Floyd算法 Floyd算法又称为Floyd-Warshell算法,其实Warshell算法是离散数学中求传递闭包的算法,两者的思想是一致的。Floyd算法是求解多源最短路时通常选用的算法,经过一次算法即可求出任意两点之间的最短距离,并且可以处理有负权…...
linux“how_paras.sh“ E212: 无法打开并写入文件
经过一番测试和查找, [6localhost bin]$ find / -name "hello.sh" 2>/dev/null /home/6/bin/hello.sh [6localhost bin]$ ls hello.sh ls: 无法访问hello.sh: 没有那个文件或目录,为什么在/bin文件下却不能打开, [6localhost …...
CSS mask-image 实现边缘淡出过渡效果
使用场景 在生产环境中,遇到一个需求,需要在一个深色风格的大屏页面中,嵌入 Google Maps。为了减少违和感,希望地图四边能够淡出过渡。 这里的“淡出过渡”,关键是淡出,而非降低透明度。 基于 Google Ma…...
电子元器件—电容和电感(一篇文章搞懂电路中的电容和电感)(笔记)(面试考试必备知识点)电容和电感作用、用途、使用、注意事项、特点等(面试必备)-笔记(详解)
作者:Whappy 座右铭:不曾拥有,何来失去! 时间:2024年8月2日08:40:04 一、电容的作用 储能: 电容器通过充电储存电荷在电容板上,形成电场储存电能。当需要释放储存的电能时,电荷…...
2024HDU Contest 5 Problem 5
题目链接 从大到小枚举gcd的值 d d d,以及编号为 d d d的倍数的点, [ d , 2 d , 3 d , … ] [d,2d,3d,\dots] [d,2d,3d,…]。 然后对于任何一条边 ( x , y ) (x,y) (x,y),如果 x x x的子树和 y y y的子树里都有编号为 d d d倍数的点…...
nGQL入门
引言 nGQL(NebulaGraph Query Language)是用于操作 NebulaGraph 的查询语言。它的语法类似于 Cypher,但有自己独特的特性。以下是一些 nGQL 的基本语法和操作示例,以帮助你入门。 基本概念 节点(Vertex)…...
[CP_AUTOSAR]_系统服务_DEM模块(二)功能规范介绍
目录 1、DEM 功能规范描述1.1、Startup behavior1.2、Monitor re-initialization 在前面 《[CP_AUTOSAR]_系统服务_DEM模块(一)》文中,简要介绍了 DEM 模块的功能、与其它模块之间的功能交互,本文将接着介绍 DEM 模块的功能规范。…...
Linux中yum、rpm、apt-get、wget的区别,yum、rpm、apt-get常用命令,CentOS、Ubuntu中安装wget
文章目录 一、常见Linux发行版本二、Linux中yum、rpm、apt-get、wget的区别2.1 yum2.2 rpm2.3 apt-get2.4 wget2.5 总结 三、CentOS中yum的作用3.1 yum清空缓存列表3.2 yum显示信息3.3 yum搜索、查看3.4 yum安装3.5 yum删除、卸载程序3.6 yum包的升级、降级 四、Ubuntu中apt-ge…...
IPython的使用技巧2
关注我,持续分享逻辑思维&管理思维&面试题; 可提供大厂面试辅导、及定制化求职/在职/管理/架构辅导; 推荐专栏《10天学会使用asp.net编程AI大模型》,目前已完成所有内容。一顿烧烤不到的费用,让人能紧跟时代的…...
win10打开程序闪退的解决方法,亲测好用
当我们在使用win10系统的时候,可能会遇到安装某些程序后无法正常使用,一打开就闪退,或者点击右下角图标就消失了,而其他程序却可以正常打开使用。下面小编就来和大家分享亲测好用的win10打开程序闪退的解决办法。 问题原因分析&a…...
木舟0基础学习Java的第二十一天(数据库,MySQL,SQLyog)
数据库 数据库:按照数据结构来组织 存储数据的厂库 数据管理系统(Database Management System,DBMS):一套操作和管理数据库的软件 用于简历 使用 维护数据库 关系型数据库:采用关系模型作为数据组织方式 逻辑结构是一张二维表 由行和列组成…...
python-鼠标绘画线条程序
闲来无聊简单编写了一个绘图小程序。 主要思路 主要是基于Python中的内置模块turtle编写的,简单扩展了一下,通过绑定事件能够达到鼠标绘制、删除、存储已经绘制图案的线条这几个功能。 路径结构 -draw- define.py- main.py- myturtle.py使用 点住鼠…...
【Python实战】如何优雅地实现 PDF 去水印?
话接上篇,自动化处理 PDF 文档,完美实现 WPS 会员功能 小伙伴们更关心的是如何去除 PDF 中的水印~ 今天,就来分享一个超简单的 PDF 去水印方法~ 1. 原理介绍 在上一篇中,我们介绍了如何将 PDF 文档转换成图片,图片…...
Keysight(原Agilent) E4980AL 精密 LCR 表特性与技术指标
Keysight(原Agilent) E4980AL 精密 LCR 表为基础 LCR 表树立了行业标准,可在多个频率范围内提供更佳的精度、速度和通用性。E4980AL 结合了种类繁多的附件,适用于一般研发和生产环境中的各种元件和材料测量。也可通过频率升级而提升投资回报率。 Keysig…...
【运维】Redis主从复制 配置
【运维】Redis主从复制 配置 主库配置Master # 默认情况下,是 启用保护模式的,其他主机的客户端无法连接到 Redis 。当想要其他主机的客户端连接到 Redis 时,需要修改为 no 。protected-mode no 从库配置Slave # replicaof [master主机ip] …...
C++ 微积分 - 求导 - 自动微分(Automatic Differentiation)
C 微积分 - 求导 - 自动微分(Automatic Differentiation) flyfish 自动微分(Automatic Differentiation,简称 AD)是一种用于精确计算函数导数的技术。它结合了符号微分的准确性和数值微分的效率。自动微分的核心思想…...
MATLAB roots函数实战:5分钟搞定高阶系统稳定性判断(附完整代码)
MATLAB roots函数实战:高阶系统稳定性分析的黄金法则 在控制工程和自动化领域,系统稳定性分析是每个工程师的必修课。面对复杂的高阶系统特征方程,传统的手工计算方法不仅耗时耗力,还容易出错。而MATLAB的roots函数配合简单的可视…...
MathType 快捷键实战指南——数学建模效率飙升的秘诀(从入门到精通)
1. 为什么你需要掌握MathType快捷键? 如果你经常需要处理数学公式,肯定遇到过这样的场景:为了输入一个简单的积分符号,不得不从工具栏里翻找半天;调整公式对齐时反复用鼠标拖动;修改矩阵维度时逐个单元格调…...
从QR码到汉信码:盘点那些你可能没听过的二维码‘家族成员’及其应用场景
从QR码到汉信码:盘点那些你可能没听过的二维码‘家族成员’及其应用场景 在移动支付和数字营销的推动下,QR码已成为现代生活中不可或缺的一部分。然而,这个看似简单的黑白方块背后,隐藏着一个庞大而复杂的技术家族。从超市商品标…...
基于堆叠自编码器与LSTM的金融时间序列预测框架解析
1. 项目概述:一个基于多层神经网络的股票回报预测框架如果你对量化交易和机器学习结合感兴趣,并且已经厌倦了那些简单的线性回归或者单层LSTM模型,那么这个名为AIAlpha的项目可能会让你眼前一亮。它不是一个“即插即用”的盈利策略࿰…...
Rails AI上下文管理引擎:构建LLM友好的业务操作上下文
1. 项目概述:一个AI驱动的Rails上下文管理引擎最近在重构一个历史悠久的Rails项目时,我遇到了一个典型的老问题:业务逻辑散落在各个控制器、模型和Service对象里,一个简单的用户操作背后要追踪七八个文件才能理清完整的上下文。更…...
OpenAPI规范自动生成CLI工具:原理、实现与工程实践
1. 项目概述:从API文档到命令行工具的自动化革命如果你是一名后端开发者,或者经常需要与各种RESTful API打交道,那么下面这个场景你一定不陌生:产品经理或前端同事跑过来,递给你一份新鲜出炉的OpenAPI/Swagger规范文档…...
GP8892SEH贴片SOP7省外围5V2A隔离型原边反馈芯片直接替代MT3723
GP8892SEH 是一款自供电原边反馈 PWM 控制芯片,采用 SOP7 贴片封装,主打"省外围、高精度、低待机"路线。它内置功率三极管,无需外置功率管,同时集成了 FB 下偏电阻和 CS 采样电阻,外围元件极少,特…...
MCA Selector终极指南:Minecraft世界区块管理的核心技术解析与实战应用
MCA Selector终极指南:Minecraft世界区块管理的核心技术解析与实战应用 【免费下载链接】mcaselector A tool to select chunks from Minecraft worlds for deletion or export. 项目地址: https://gitcode.com/gh_mirrors/mc/mcaselector MCA Selector是一款…...
【LangChain】 入门:从分步调用到链式编程
LangChain 入门:从分步调用到链式编程本文基于一段翻译助手的示例代码,讲解 LangChain 的核心概念、输出解析器的作用,以及普通写法与链式写法的对比。一、LangChain 是什么? 名字拆解缩写含义LangLanguage(语言&#…...
基于微信小程序的家政服务预约系统(30291)
有需要的同学,源代码和配套文档领取,加文章最下方的名片哦 一、项目演示 项目演示视频 二、资料介绍 完整源代码(前后端源代码SQL脚本)配套文档(LWPPT开题报告/任务书)远程调试控屏包运行一键启动项目&…...
