我的碎碎念

不为繁华易匠心,不舍初心得始终。

0%

前言

几个月前在V2EX吐槽,我的python依赖包管理,从pip开始,为了方便,切换到pipenv,之后pipenv安装依赖有点问题,之后学习了poetry,但是peotry又出现了一些依赖问题,最后还是用回了pip。

之后看到有人回复推荐rye和uv,于是又继续学习了新的依赖包管理器。下面做了一个命令速查表,方便使用。

如何安装rye

windows可以从这里下载 https://rye.astral.sh/guide/installation/

macos和linux只需要输入下面命令即可:

1
curl -sSf https://rye.astral.sh/get | bash

下载安装完后,需要把rye主目录下的Shims路径添加进环境变量

1
echo 'source "$HOME/.rye/env"' >> ~/.bashrc

如何设置代理

可以为rye设置代理:

1
2
rye config --set proxy.http=http://127.0.0.1:7890
rye config --set proxy.https=http://127.0.0.1:7890

如何取消代理:

1
2
rye config --unset proxy.http
rye config --unset proxy.https

如何启用uv

uv 是一款用 Rust 编写的,性能优秀的 Python 包安装和解析工具,被设计用于替代 pip 和 pip-tools。

1
rye config --set-bool behavior.use-uv=true

如何列出所有可用的 Python 版本

1
rye toolchain list --include-downloadable

如何初始化项目

1
rye init

如果需要特定版本的python,可以使用-p参数指定特定版本python

1
rye init -p cpython@3.11

PS:python3.11比之前版本的python的性能要好。

如果想创建一个脚本型项目,需要加上--script参数

1
rye init --script

如果想为你的脚本或web创建项目,可以加上--virtual参数。

1
rye init --virtual

虚拟项目是本身不是可安装的Python包的项目,但会同步它们的依赖项。它们像pyproject.toml中的普通python包一样声明,但它们不创建包。相反,tool.rye.virtual键设置为true

这也是我最常用初始化rye项目的方式。

如何初始化依赖

初始化项目后,可以使用rye sync指令初始化依赖,此时就会在当面目录下创建一个.venv文件夹:

1
rye sync

如何添加依赖包

使用rye add命令安装依赖包,例如安装django的命令:

1
rye add django

如何移除依赖包

使用rye remove命令移除依赖包:

1
rye remove django

如何运行rye项目中的的命令

使用rye run可以运行.venv中提供的脚本或应用程序,也可以运行Rye特定的脚本。

1
rye run django-admin

在不带参数的情况下打开它以查看所有可用的脚本,例如:

1
2
3
4
5
6
$ rye run
flask
hello
python
python3
python3.9

如何添加pypi镜像

使用rye config --show-path命令取得配置文件路径。用文本编辑器打开配置文件,并添加如下内容:

1
2
3
[[sources]]
name = "default"
url = "https://mirrors.aliyun.com/pypi/simple/"

此外,也可以在项目文件 pyproject.toml 中进行设置:

1
2
3
[[tool.rye.sources]]
name = "default"
url = "https://mirrors.aliyun.com/pypi/simple/"

最近使用gunicorn部署python web应用,发现了一些异常。比如无法同时多个大模型聊天等等。现在重新学习gunicorn的工作模式。

根据gunicorn的官方文档,有以下几种工作模式:

sync

sync:这是默认的模式。优点是最简单,缺点是每个 worker 进程一次只能处理一个请求,并发性能较低。我一开始就是使用这个模式部署,并且设置了worker=1,所以无法同时多个大模型聊天。

gthread

gthread:优先推荐的模式。优点是适用于 I/O 密集型应用,内存占用相对较低,支持多线程处理请求,可以利用多核 CPU 的优势。缺点是会受GIL限制。这个模式基本适用django和flask应用了。

下面以一个启动示例来讲解:

1
gunicorn --worker-class gthread --workers 3 --threads 2 myproject.wsgi:application

这个配置启动 3 个 worker 进程,每个 worker 进程有 2 个线程,这样总共可以处理 6 个并发请求。

部署后,可以根据需要监控gunicorn的性能指标,比如CPU和内存,并根据实际情况调整 worker class 和相关参数。

gevent/eventlet

gevent/eventlet:这是非常适合高并发的模式,能够处理大量并发连接,性能优于 gthread。但是缺点是需要修改代码,以确保与 gevent/eventlet 兼容,配置复杂,并且可能会出现 monkey-patching 相关的问题。

我在部署一个有后台长时间运行的线程的时候,需要设置gunicorn的preload的配置,提前加载app来启动后台线程,但是部署的时候,就出现了monkey-patching。查了github的issue,这个问题至今也没解决,参见:https://github.com/benoitc/gunicorn/issues/927

如何选择

那么如何选择?首先尝试使用 gthread,并根据服务器资源和应用负载调整 workersthreads 的数量。如果并发量非常高,并且 gthread 无法满足性能需求,可以考虑使用 geventeventlet,但需要注意代码兼容性问题。最后避免在生产环境中使用 sync,除非你的应用负载非常低。

之前帮某社群干活的时候,做了一点向量数据库的性能评测,选择了几个常见的向量数据库:qdrant、milvus和pgvector。压测下来,发现qdrant性能最好,pgvector并发最不行。

因此后面有需要使用向量数据库的场景,我都是使用qdrant。那么什么是qdrant?qdrant是一个高性能、大规模的向量数据库和向量搜索引擎。它使用rust语言编写。提供HTTP接口使用。

闲话少说,那么如何一键部署qdrant向量数据库呢?

如果你有自己的服务器并且会docker,可以使用docker命令,如下:

1
2
3
docker run -d --name qdrant -p 6333:6333 -p 6334:6334 \
-v $(pwd)/qdrant_storage:/qdrant/storage:z \
qdrant/qdrant

其中6333端口是qdrant的HTTP API,直接调用这个端口即可使用qdrant。

另外 http://<IP>:6333/dashboard 是qdrant的dashboard地址,部署之后可以访问该路径看到管理页面。

如果你没有服务器也不会docker,但想快速体验一下qdrant,可以试试zeabur云平台的一键部署。什么是zeabur可以参考这篇文章,这里不再赘述。我在zeabur平台做了一个qdrant的部署模板,可以一键快速部署,只需要点击下面图片即可。

Deploy on Zeabur

如果图片显示不正常,也可以点击下面链接部署:https://zeabur.com/templates/1DAD45

在nuxt.config.ts设置nitro的值即可,例如:

1
2
3
4
5
6
export default defineNuxtConfig({
...
nitro: {
devProxy: { '/api': `http://127.0.0.1:${ process.env.SERVER_PORT || 8080 }/api` },
},
});

这样就会把/api路径下的请求转发到另一个本地端口。

注意,nuxt3不需要安装什么@nuxtjs/proxy,直接配置nitro代理即可。

参考资料:https://github.com/nuxt-community/proxy-module/issues/116

OpenAI

o1-preview

发布于2024年9月13日,o1模型标志着 OpenAI 以在推理能力上的重大进展,相比较之前的GPT-4o,o1-preview在多个方面表现得更加出色,尤其是在编写代码和解决复杂问题的能力上,通过采用全新的优化算法和专门定制的新训练数据集,使得模型在准确性和推理能力上有了显著提升。

o1-mini

与o1-preview同时推出,是o1系列中的小尺寸版,价格比o1-preview便宜80%,虽然存在使用次数的限制,但其在生成和调试复杂代码方面表现出色,特别适合开发人员使用。

gpt-4o-2015-05-13

2024年5月13日, OpenAI 正式发布其大模型新版本 GPT-4o,“o”代表Omni,即全能的意思,凸显了其多功能的特性,从多模态端到端实时推理,无需转换,响应延迟大幅缩短。

gpt-4o

GPT-4o可以将文本、音频、图像和视频的任意组合作为输入,并将文本、音频和图像的任意组合作为输出;可以在最短232毫秒,平均320毫秒的时间,对音频做出响应,这与人类在对话中的响应时间相似。

gpt-4o-mini-2024-07-18

于2024年7月18日推出,该模型是GPT-4o的一个分支,其在保留了GPT-4功能的同时,体积上比GPT-4o等大模型要小得多,成本价格上也更加便宜。

gpt-4-plus

是GPT-4的升级版,在GPT-4的基础上升级了一些功能,包括更精确的文本表示、更先进的情感分析和更高的语义理解能力等,在自然语言理解和生成方面的表现更加出色。

gpt-4o-2024-08-06

于2024年8月6日上线,是多模态模型GPT-4o的更新版,在其API中引入一项突破性功能——结构化输出,确保了模型生成的输出能够完全符合开发人员提供的JSON架构,从而显著提升了API的可靠性和应用的精确度。

chatgpt-4o-latest

于2024年8月15日发布,是GPT-4o的最新版本,在编码、指令遵循和硬提示方面都有显著提高,最大支持128K上下文输出,最大输出Tokens达16K,在推理方面与GPT-4o相比有较大提升。

gpt-4-turbo

于2024年4月正式推出,模型功能更强大、更便宜,并支持128K上下文窗口;平台中新的多模态功能,包括视觉、图像创建和文本转语音;知识库更新上,其现实世界知识截止时间现在是2023年4月;价格上输入代币比GPT-4便宜3倍,输出代币便宜2倍。

gpt-4-turbo-preview

GPT-4-Turbo预览模型,在2023年11月6日亮相,之后有0125版本更新,其不仅在性能上有所提升,还修复了一个影响非英文UTF-8生成的漏洞,增加了模型的稳定性和多语言支持。

gpt-3.5-turbo-0125

GPT-3.5-turbo的最新模型,在按请求格式回应时具有更高的准确性,并修复了一个错误,该错误导致非英语语言函数调用时出现文本编码问题,在稳定性和准确性都提高的同时,gpt-3.5-turbo-0125价格相比之前也降低了。

gpt-4

于2023年3月14日由OpenAI正式发布,它是GPT系列模型的第四代,具有更强的语言理解和生成能力、多模态处理能力、更大的模型规模、改进的安全性和伦理性等,可应用于如对话系统、内容生成、代码编写、数据分析、教育和研究等各种领域。

Gemini

gemini-1.5-pro-002

谷歌发布于2024年9月25日,相比其他1.5系列模型的其他版本,新版的1.5 Pro整体素质提高,数学、长上下文和视觉上有大幅增加,能够更好地理解更加复杂和具有细微差异的指令,价格上降低>50%,速率限制提高了约3倍,输出速度提高2倍,延迟降低3倍。

gemini-1.5-flash-002

与gemini-1.5-pro-002共同发布,虽然是一个较为轻量的模型,但其在多模态推理能力方面依然表现出色,擅长摘要制作、聊天应用、提供图说和视频字幕,以及从长篇文件和表格中提取数据等任务,且在响应速度方面有了极大的改进。

gemini-1.5-pro

第一代模型由谷歌发布于2024年2月15日,为Gemini-1.0-Pro的升级版本,支持超长上下文内容,能够稳定处理高达100万token(相当于1小时的视频、11小时的音频、超过3万行代码或70万个单词);支持多模态输入,能够分析、总结、处理多种形式,包括图片、文档、视频和音频。

gemini-1.5-pro-0801

是gemini-1.5-pro的实验版本,擅长多语言任务,并在数学、复杂提示和编码等技术领域表现出色,其另一个突出特点是其高达 200 万个token的扩展上下文窗口,已经远远超过了市面上许多的AI模型。

gemini-1.5-flash-001

谷歌于5月15日推出,1.5 Flash是通过API提供的速度最快的Gemini模型,在具备突破性的长文本能力的情况下,针对大规模地处理高容量、高频次任务进行了优化,在总结摘要、聊天应用、图像和视频字幕生成以及从长文档和表格中提取数据等方面表现出色。

ANTHROPIC

claude-3.5-soonet-20241022

Anthropic最新推出的升级版,各项能力全面胜过之前版本,其中代码能力提升显著,能够根据用户指令移动光标、点击相应位置以及通过虚拟键盘输入信息,模仿人类与计算机的交互方式。

claude-3.5-sonnet-20240620

Anthropic公司于2024年6月20日发布的LLM大语言模型,属于Claude3.5系列模型中的先遣版本,在理解细微差异、幽默感和复杂指令方面表现得更为出色,书写风格也更自然、更具亲和力,擅长解释图表、图形。

claude-3-opus

Opus是Claude3系列中最先进的模型,在高度复杂的任务上表现出了市场上最好的性能,它能够轻松应对各种开放式提示和未知场景,并以出色的流畅度和人类般的理解能力完成任务。

claude-3-haiku

是Anthropic速度最快、体积最小的模型,能够提供几乎即时的响应能力,可以极快地解答简单的问题和响应请求,Haiku的定价是每百万token输入0.25美元、输出1.25 美元,相当便宜。

Perplexity AI

pplx-8b-online

由Perplexity AI公司推出,是一款基于大语言模型(LLM)的在线模型,它利用实时互联网数据提供即时、精确的查询响应,通过API提供,能够实现对查询的即时响应,标志着首次通过API公开访问在线LLMs。

pplx-70b-online

基于Llama2-70B基础模型构建,这款在线模型的主要特点是能够实时访问互联网数据,从而提供最新的信息,它通过Perplexity Labs的内部搜索基础设施,优先访问高质量和权威的网站,并采用先进的排名机制来实时呈现相关和可靠的信息片段。

智谱AI

GLM-4

GLM-4是智谱AI于2024年1月16日发布的基座大模型,可以支持128k的上下文窗口长度,单次提示词可以处理的文本可以达到300页,同时在多模态能力方面,文生图和多模态理解都得到了增强。

GLM-4-Long

专为处理超长文本和记忆型任务设计的模型,支持超长输入,上下文长度最高为1M,约150-200万字,具备长文本推理能力,处理百万字文本响应时间可控,是处理大规模文本数据的强大工具。

GLM-4-Plus

发布于8月29日,GLM-4-Plus基座模型,在多个关键指标上实现了大幅提升,尤其是在语言理解能力、指令遵循能力和长文本处理能力方面,通过多种方式构造出了海量高质量数据,并利用 PPO等多项技术,有效提升了模型推理、指令遵循等方面的表现,能够更好地反映人类偏好。

GLM-4-Air

综合性能接近GLM-4,但价格仅为1元100万token,非常适合大规模应用,是性价比很高的版本,具有128k上下文,速度快,价格实惠。

GLM-4-Airx

GLM-4-Air的高性能版本,效果不变,推理速度达到2.6倍,具有8k上下文。

CodeGeeX-4

CodeGeeX是智谱AI旗下的代码生成大模型,2022年9月发布第一代模型,2024年7月5日发布CodeGeeX-4,作为最新一代的CodeGeeX系列模型,大幅提高了代码生成能力,单一模型即可支持代码补全和生成、代码解释器、联网搜索、工具调用、仓库级长代码问答及生成等功能。

GLM-4V

GLM-4V具备视觉理解能力,实现了视觉语言特征的深度融合,支持视觉问答、图像字幕、视觉定位、复杂目标检测等各类图像理解任务。

GLM-4V-Plus

智谱AI发布的新一代图像/视频理解模型,具备卓越的图像理解能力,并具备基于时间感知的视频理解能力,其在图像理解方面表现出色,能够理解并分析复杂的视频内容,同时具备超强的时间感知能力,不仅可以理解网页内容并将其转换为html代码,还能精准描述视频中的动作和场景变化。

阿里云

Qwen-Max

是由阿里云自主研发的大语言模型,它是通义千问系列的一部分,用于理解和分析用户输入的自然语言,其适合处理复杂、多步骤的任务,提供了多个模型版本,包括qwen-max-longcontext,支持长达30,000字的上下文,满足了需要处理长文档或复杂逻辑的任务需求。

Qwen-VL-Max

是阿里开源模型Qwen-VL的升级版,其大幅提升图像相关的推理能力,以及对图中细节和文字的识别、提取和分析能力,并支持百万像素以上的高清分辨率图和各种长宽比的图像,在中文问答、中文文字理解相关的任务上表现出色。

Qwen-Math-Plus

通义千问数学模型是专门用于数学解题的语言模型,致力于解决复杂、具有挑战性的数学问题,其技术原理包括大规模预训练、专用语料库、指令微调、奖励模型、二元信号和PPO优化等,该模型在多个数学基准测试中表现出色,尤其在数学竞赛题目的解答上超越了多个领先的开闭源模型。

腾讯

Hunyuan-Lite

百亿参数规模,Hunyuan-腾讯混元大模型是腾讯全链路自研的万亿参数大模型,Hunyuan-Lite升级为MOE结构,上下文窗口为256k,在NLP、代码、数学、行业等多项评测集上领先众多开源模型。

Hunyuan-Standard

千亿参数规模,采用更优的路由策略,同时缓解了负载均衡和专家趋同的问题,长文方面,大海捞针指标达到99.9%,hunyuan-standard-32K性价比相对更高,在平衡效果、价格的同时,可对实现对长文本输入的处理;hunyuan-standard-256K在长度和效果上进一步突破,极大的扩展了可输入长度。

Hunyuan-Pro

万亿参数规模,当前混元模型中效果最优版本,在各种benchmark上达到绝对领先的水平,复杂指令和推理,具备复杂数学能力,支持functioncall,在多语言翻译、金融法律医疗等领域应用重点优化。

Hunyuan-Code

混元最新代码生成模型,经过200B高质量代码数据增训基座模型,迭代半年高质量SFT数据训练,上下文长窗口长度增大到 8K,五大语言代码生成自动评测指标上位居前列;五大语言10项考量各方面综合代码任务人工高质量评测上,性能处于第一梯队。

Hunyuan-Vision

混元最新多模态模型,支持图片+文本输入生成文本内容,包括图片基础识别、图片内容创作、图片多轮对话、图片知识问答、图片分析推理、图片OCR等能力。

百川

Baichuan3-Turbo

针对企业高频场景优化,效果大幅提升,高性价比,相对于Baichuan2模型,内容创作提升20%,知识问答提升17%,角色扮演能力提升40%。

Baichuan4

百川智能于2024年5月22日发布的最新一代基座大模型,其在通用能力、数学和代码处理能力上都有所提升,在处理知识百科、长文本和创作生成等中文任务时都展现出了优秀的能力,在国内权威大模型评测机构SuperCLUE的评测中,Baichuan4的模型能力排名国内第一,业内水准算第一梯队了。

kimi

Moonshot-v1-8k

Moonshot-v1是Moonshot AI推出的一款千亿参数的语言模型,具备优秀的语义理解、指令遵循和文本生成能力,Moonshot-v1-8k是一个长度为8k的模型,支持8K上下文窗口,适用于生成短文本。

零一万物

Yi-Ligtning

10月16日零一万物正式发布新旗舰模型Yi-Lightning,其理速度有大幅提升,首包时间提升一倍,最高生成速度提速近四成,在多轮对话、数学、代码等多个分榜成绩出众,价格方面也极具优势,已上线Yi大模型开放平台,每百万token仅需0.99元。

Yi-Large

零一万物公司发布于2024年5月13日的一款千亿参数规模的闭源大模型,其主要特点包括超强的文本生成和推理能力,适用于复杂推理、预测和深度内容创作等场景。

Yi-Vision

零一万物发布的开源多模态语言大模型,Yi-Vision基于Yi语言模型开发的,具备高性能图片理解、分析能力,可服务基于图片的聊天、分析等场景。

Deepseek

Deepseek-Chat

DeepSeek是“深度探索”公司开发的模型,基于DeepSeek-V2模型,是一款集成了2千亿参数量的MoE模型的AI技术产品,其特点是经济的训练和高效的推理,支持128K上下文的开源模型,而其对话官网/API则支持32K上下文,提供即刻接入、能力卓越、价格低廉的服务,并且兼容OpenAI API接口,为用户带来丝滑的体验。

Deepseek-Coder

DeepSeek-Coder是一个智能编码辅助工具,能够理解编程问题的描述,并自动生成相关的解决方案或代码片段,其训练数据量高达2T,涵盖87%的代码和13%的自然语言,包括英语和汉语,从1B到33B的不同模型版本,可满足了各种规模项目的需求。

百度

ERNIE-4.0-8k

ERNIE-4.0-8k是百度自研的旗舰级超大规模大语言模型,相较ERNIE3.5实现模型能力全面升级,广泛适用于各领域复杂任务场景;支持自动对接百度搜索插件,保障问答信息时效,支持5K tokens输入+2K tokens输出。

ERNIE-4.0-Turbo

于2024年6月28日发布,是2023年10月推出的 Ernie-4.0模型的升级版,是文心系列最新旗舰版大模型,将输入tokens长度从2K提升至128K,AI生成图像分辨率从512×512提高到1024×1024,在生成速度和效果上都有大幅提升。

阶跃星辰

Step-1V-8k

国内大模型公司阶跃星辰推出的Step-1V是一款千亿参数的多模态大模型,拥有强大的图像理解能力,暂时只开放文本和图像输入,且仅支持文本生成,Step-1V-8k是指上下文长度为8k。

Step-2-16k

2024年7月4日阶跃星辰发布了Step-2模型,这是一个拥有万亿参数的巨型深度学习模型,采用了MoE结构,在数学、逻辑、编程、知识、创作、多轮对话等方面,Step-2的能力体感全面逼近GPT-4,Step-2-16k是指上下文长度为16k。

讯飞

Spark Max

讯飞星火认知大模型是科大讯飞发布的大模型,Spark Max是旗舰级大语言模型,具有千亿级参数,核心能力全面升级,具备更强的数学、中文、代码和多模态能力,适用于数理计算、逻辑推理等对效果有更高要求的业务场景。

Spark Ultra

最强大的大语言模型版本,文本生成、语言理解、知识问答、逻辑推理、数学能力等方面实现超越GPT 4-Turbo,优化联网搜索链路,提供更精准回答。

Spark Lite

轻量级大语言模型,具有更高的响应速度,适用于低算力推理与模型精调等定制化场景,可满足企业产品快速验证的需求。

开源模型

Llama3.2-90B

9月25日正式推出,Meta最先进的模型,擅长常识、长文本生成、多语言翻译、编码、数学和高级推理,还引入了图像推理功能,可以完成图像理解和视觉推理任务。

Llama3.2-11B

非常适合内容创建、对话式人工智能、语言理解和需要视觉推理的企业应用,该模型在文本摘要、情感分析、代码生成和执行指令方面表现出色,并增加了图像推理能力,用例与 90B 版本类似:图像标题、图像文本检索、视觉基础、视觉问题解答和视觉推理,以及文档视觉问题解答。

Qwen2.5-72B

9月19日推出,支持高达128K的上下文长度,可生成最多8K内容,支持超29种语言,基于 18T token 数据预训练,相比Qwen2,Qwen2.5整体性能提升18%以上,拥有更多的知识、更强的编程和数学能力,72B 是足够用于工业级、科研级场景的性能王者。

Qwen2.5-Coder-7B

Qwen2.5-Coder是Code-Specific Qwen大型语言模型的最新系列,是一个专门用于代码生成和编程相关任务的大型语言模型,采用了基于Transformer的架构,并引入了特定的优化技术,如分组查询注意力(GQA)和双块注意力(DCA),以优化推理性能和长文本处理能力。

Llama3.1-405B

Llama3是Meta最新开源的大语言模型,405B适用于合成数据、大语言模型 (LLM) 作为评判者或蒸馏,支持128K token 的上下文长度和 8 种语言,允许使用模型输出来改进其他LLM。

Llama3.1-70B

70B适合大规模 AI 原生应用,拥有70亿个参数,支持8种语言的文本生成,采用优化的Transformer架构,并通过监督式微调和人类反馈强化学习进一步优化,以符合人类对帮助性和安全性的偏好。

Llama3.1-8B

8B适用于需要在多种语言环境下进行自然语言处理和对话系统开发的研究人员和开发者,包含8B大小的版本,支持8种语言,专为多语言对话用例优化。

Llama3-70B

Llama3是Meta于2024年4月18日推出,有8B和70B两个版本,70B拥有700亿个参数,这种复杂性的增加转化为各种NLP任务的增强性能,包括代码生成、创意写作,甚至多态应用程序,它也需要更多的计算资源,需要具有充足内存和GPU能力的强大硬件设置。

Llama3-8B

Llama3-8B型号在性能和资源需求之间取得了平衡,它拥有80亿个参数,提供令人印象深刻的语言理解和生成功能,同时保持相对轻量级,使其适用于具有适度硬件配置的系统。

Mistral-Large-2

2024年7月26日,法国AI初创公司Mistral AI发布了最新模型Mistral-Large-2,拥有1230亿参数,尤其擅长代码和数学推理,上下文窗口128k,支持数十种自然语言以及80+编程语言,特别在MMLU上,其预训练版本更是达到了84.0%的准确率。

Mixtral-8x7B

Mixtral-8x7B是首个开源的MoE大模型,具有8个7B参数的专家和高效的稀疏处理,该模型在每一层都由8个前馈块(即“专家”)组成,通过路由网络为每个令牌选择两个专家进行处理,并将它们的输出结合起来,这种架构允许模型在保持较低计算成本的同时,访问更多的参数。

Gemma-7B

Gemma是谷歌研发的AI大模型,Gemma-7B拥有70亿参数,旨在高效部署和开发,适用于消费级GPU和TPU,在7B参数级别的模型中性能可与最佳模型相媲美,包括Mistral-7B。

Gemma2-9B

Gemma2是谷歌于2024年6月发布的最新开源模型,相比较第一代,Gemma2推理性能更高、效率更高,并在安全性方面取得了重大进步,Gemma2-9B的性能在同类产品中也处于领先地位,超过了Llama3-8B和其他同规模的开源模型。

Gemma2-27B

Gemma2-27B在同类产品中性能最佳,甚至能挑战规模更大的模型,27B模型可用于在单个谷歌Claude TPU主机或NIVIDIA H100 GPU上以全精度高效运行推理,从而在保持高性能的同时大幅降低成本。

Command R+

Cohere公司最新推出的模型,这是Command R系列中最强大的模型,总计拥有1040亿个参数,其独特之处在于其强大的生成能力和先进的检索功能,可以让模型根据给定的上下文信息,从外部知识源中检索相关内容,并将其融合到生成的响应中,有效缓解模型的”幻觉”问题。

Command R

Command-R拥有35B的模型参数,提供了强大的语言理解和生成能力,模型支持高达128K的上下文窗口,大大超越了行业标准,使其能够处理更复杂的文本和生成更连贯的内容。

Qwen2-72B

于2024年6月7日发布,是阿里云研发的通义千问大模型系列之一,72B指令微调版模型,还增大了上下文长度支持,最高可达128k token,其具有大规模高质量训练语料、强大的性能、覆盖更全面的词表等特点。

Qwen2-7B

Qwen2是阿里通义推出的新一代多语言预训练模型,包含0.5B、1.5B、7B、57B-A14B和72B共5个尺寸,其中Qwen2-7B支持更长的上下文长度,最高可达128K tokens,在中文和英语的基础上,新增27种语言的高质量训练数据。

Llama-3.1-nemotron

是英伟达NVIDIA开发的一系列大型语言模型,基于Llama-3.1-70B开发而成,它采用了一种新颖的神经架构搜索(NAS)方法,从而建立了一个高度准确和高效的模型。在高工作负荷下,该模型只需一个英伟达H100 GPU 即可运行,因此更易于使用,也更经济实惠。

其他模型

farui-plus

由阿里云推出的一个法律大模型产品,它基于通义千问大模型,经过法律行业的数据和知识专门训练,具有法律智能对话、法律文书生成、法律知识检索、辅助案情分析、法律文本阅读和解析、合同条款审查等功能。

XuanYuan-70B

轩辕是国内首个开源的千亿级中文对话大模型,同时也是首个针对中文金融领域优化的千亿级开源对话大模型,轩辕70B(度小满中文金融对话大模型)是由度小满金融开发的中文金融对话大模型,针对金融场景中的长文本业务,它将上下文长度扩展到了8k和16k,在保持中英文通用能力的同时,显著提高了金融理解能力。

ChatLaw

由北京大学信息工程学院袁粒课题组与北大-兔展AIGC联合实验室联合发布的中文法律大模型,于2023年7月发布,其是基于各种中文法律条文、实际案例、判决条文所训练出来的法律大模型,可借助 AI实现法律合同撰写、案例介绍、条款讲解、司法问题咨询等场景。

Qwen2-Math-72B

阿里巴巴于8月8日再次开源了Qwen2-Math系列模型,这是一个专注于数学推理能力的模型,在Math上的评测结果表明,Qwen2-Math-72B超越了最先进的模型,包括GPT-4o、Claude-3.5-Sonnet、Gemini-1.5-Pro和Llama-3.1-405B。

grok-2

发布于2024年8月13日,是xAI公司推出的一款先进的人工智能语言模型,包括Grok-2和Grok-2 mini两个版本,具有聊天、编码和推理等功能,该模型拥有3140亿个参数,是迄今为止参数量最大的开源模型,这使得它在处理复杂任务和生成高质量文本方面具备了更强的能力。

上一篇我已经介绍过什么是zeabur了,这一次就简单记录下怎么在zeabur部署我的第一个hexo博客。

什么是hexo?

Hexo 是一个快速、简洁且高效的博客框架。它使用markdown语法编写博客,然后解析你的文章,就可以生成静态网页。

使用Hexo需要先准备按两个工具:git和nodejs。如果没有安装,请先找其他资料自行安装。下面直接从命令行开始。

如何安装hexo

使用npm install命令安装hexo命令行工具:

1
npm install -g hexo-cli

之后就可以初始化一个博客,我这里使用hexo-demo作为文件夹名,你可以换成你喜欢的文件夹名:

1
hexo init hexo-demo

初始化的时候要访问github,如果出现网络问题,打开梯子再运行该命令比较好。之后进入该文件夹,安装npm依赖环境

1
2
cd hexo-demo
npm install

github创建仓库

之后我们需要把这个目录下的代码提交到github,再在zeabur上使用github方式,以serverless方式部署,即可完成。

注册好github后,点击这个链接进入创建github仓库的页面:https://github.com/new

填写仓库名称,我这里使用hexo-demo作为示例,仓库可设为Private模式,不公开访问。

最后点击绿色的按钮创建仓库即可。

提交到github

回到前面创建hexo目录下的命令行,使用下面命令提交代码

1
2
3
git init
git add .
git commit -m "first commit"

之后设置远程仓库并提交上去,注意,{your-username}是你的github仓库用户名:

1
2
git remote add origin https://github.com/{your-username}/hexo-demo.git
git push -u origin master

使用https方式提交可能还需要输入你的帐号密码,按提示输入就行。

提交之后,刷新一个github页面,有代码显示就表示成功了。

zeabur部署

之后就可以到zeabur部署博客。

登录注册zeabur之后,进入 https://dash.zeabur.com/projects 项目页面,在右上角点击【创建项目】

选择一个你喜欢的地区服务器,建议国外服务器。

之后会跳转到添加服务弹窗,选择第一个【从Github仓库部署】。

选择你刚刚创建的博客仓库,如果没有,需要去【配置github】,授予权限。

选中仓库 后,下一步是【构建计划预览】,简单看一下,这个预览表示是使用serverless方式部署,如果是docker部署会显示容器方式部署。最后点击【部署】就行了。

以上步骤就完成了一次部署。

部署完之后,那么如何访问博客呢?zeabur也提供了它的子域名。

在服务页面往下拉,找到【网络】菜单,点击【生成域名】,填入你喜欢的域名,我这里使用的是hexo-example,之后会生成 https://hexo-example.zeabur.app/ 域名,最后【确认绑定】,完成。

访问测试一下 https://hexo-example.zeabur.app/ ,如果成功了,你的第一个hexo博客就搭建好了。

近期因工作和出海业务需要,开始研究一些方便部署云服务的平台。

之前有接触过vercel,sealos等平台,但是vercel对中文用户不友好,sealos费用又比较高。综合评估下来, 最后深入使用了zeabur平台。下面简单把自己对zeabur的使用体验发表成文。

什么是zeabur?

zeabur是台湾公司出品的一套部署服务的平台,支持各种编程语言和开发框架。对比传统的部署方式,Zeabur 可以在几分钟内完成部署,不需要花费大量的时间去学习部署的相关知识,把时间精力专注于产品的开发。

并且zeabur也很注重中国市场,除了支持信用卡付费以外,也支持支付宝付费,使用的是stripe支付平台。

三步快速在zeabur部署服务

第一步,你需要创建一个zeabur帐号。

可以点击这个链接创建一个,zeabur目前支持邮箱和github社交认证。

第二步,就是创建项目。

登录成功后,你会被自动重定向到 Zeabur 的控制台页面。 点击右上角的【创建项目】按钮创建一个新的项目。之后你会看到一个弹窗来供你选择你的项目所在的区域。

第三步:部署服务。

点击你刚刚创建的项目,Zeabur 会为你打开该项目的详情页面。

最后选择你要部署的服务部署就行。

更多细节可以参考我如何在zeabur部署hexo博客

zeabur的付费方案有哪些?

zeabur目前有3种类型的方案:免费方案、开发者方案和团队方案。我目前使用的是开发者方案,每月需要5美元,换算成人民币就是35块。和各大云厂商的每月基础版的云主机价格相差不大。

这5美元也是你当月的免费使用额度,超出的用量另外计算。我部署的一个基于python的AI音乐web服务,经过优化后,每天用量是在0.04-0.05美元之间,30天最多是花费1.5-1.6美元之间。如果用量大不,还可以多部署2个这样的docker web服务。

某服务zeabur资源近七天用量图

但是,你除了可以在zeabur部署docker服务以外,还可以在zeabur部署serverless服务!

zeabur是怎么部署服务的?

zeabur提供两种部署机制,一个是docker容器机制,另一个是serverless机制。

什么是serverless?对于zeabur的使用者来说,serverless是一个无状态的部署方式,当有请求来时才启动你的服务,没有请求时则暂停,不消耗任何资源,并且收费也是根据你的使用资源来衡量。也就是按需使用,按需付费。

docker机制对于开发者应该很熟悉了。zeabur的docker机制是长时间运行的服务,如果你的服务应用是有状态的,需要长时间运行的,那么可以使用docker机制来部署,同时每分钟每小时都会计算你的使用资源。

但比较可惜的是,截至2024年10月,zeabur的serverless还不支持python的异步服务器(asgi server),因此也不能部署fastapi框架的服务,只能使用docker机制部署。

zeabur支持多种部署代码来源,包括:

  • 从github仓库部署
  • 从模板部署
  • 直接部署数据库,比如mysql或mongodb
  • 从本地上传源码部署
  • 从docker镜像部署
  • 等等

我最常用的有三个:自己的项目是上传到github,然后从github仓库部署;需要数据库什么的,就直接从官方提供的资源部署数据库;如果是某些web服务别人已经创建好模板了,就会从模板部署。

如果你也对zeabur服务平台有兴趣了,可以点击下面链接尝试体验:https://zeabur.com?referralCode=AngelLiang

AI编程课二期第一次答疑,有位同学提出了一个重量级的问题:「感觉 Python 不是很适合编写程序,因为有全局解释锁的存在和动态编译导致的性能问题,后续如何学习 c 语言或者 JAVA?」

我第一眼看到这个问题也头痛,如果我来回答,会分为两部分:Python的性能问题和如何学习其他语言,我这篇文章只针对前者进行探讨。

追求速度是人类的天性。Python在性能这一块指标肯定是拿不到前三名的,但不代表不能在TIOBE编程语言排行榜拿下每月第一名。回想起在AI时代的智识四课阅读课中,有一本最经典的计算机书籍——保罗·格雷厄姆在2004年出版的《黑客与画家》——这本书里面的一些观点就可以很好地解答Python到底适不适合写程序。我把书中几个观点提取出来,并结合自己的开发经历,略和大家讨论一二。

必须承认,如果你关注运行速度,最好使用接近机器的语言

我大学所学的电子信息工程专业,学习的第一门语言就是C语言,在我专业中需要对一些资源很小的芯片进行编程,简称单片机开发,需要使用的语言就是C语言。虽然也有些人移植了Python到单片机,但是对于商业化电子产品来说,可能并不会真正使用高级语言去开发单片机。

一个原因就是高级语言运行速度太慢,单片机是一个硬件资源受限制的开发环境,本身CPU运算速度根本达不到GHz级别,有些小家电的单片机的运行速度可能只有12MHz,如果再跑一个Python虚拟机,再在上面运行字节码,恐怕运行速度会很慢。并且这种开发更多的是属于制造业领域,需要考虑硬件成本,那么为了在单片机上跑Python,就需要好一点的芯片,于是硬件成本就上升了。

另外不喜欢用高级语言开发单片机的原因是,由于高级语言做了一层封装,所提供的接口没有C语言的SDK多,以至于没有把一些硬件资源引出来,无法进行控制,最后明明芯片是支持的功能,却无法使用。

当然,还有一些其他领域会使用C语言,比如web服务最常见的代理网关nginx,以及机器学习领域常用的numpy库的底层实现,都是使用C语言开发的。它们使用C语言不外乎以上两点原因,提高运行速度或调用硬件资源。

对于半路出家学习编程的同学来说,大多数还是做应用开发。此时,程序员的时间比计算机的时间昂贵得多

应用开发是需要编写大量的业务代码的。对于开发者来说,首先是收到需求(哪怕是自己想的灵感,也可以算是一种需求);然后理解需求,如何把这个需求进行分解,需要实现几个功能模块,有没有可以直接调用的库,还是要自己编写;最后才是实现需求,写下一行行代码。

低级语言,比如C语言和汇编语言,运行速度是很快,也能直接调用硬件资源。但是,使用它们开发效率会非常低。你需要编写大量的代码才能实现一些功能,而使用高级语言就很简单,比如同样是编写一个Hello World程序:

C语言版本的Hello World

1
2
3
4
5
6
#include <stdio.h>

int main() {
printf("Hello World\n");
return 0;
}

Python版本的Hello World

1
print("Hello World")

你看!Python是多么的简洁。此时该语言的优点就来了,开发者可以直接思考如何实现业务功能,不需要更多的心思去想语法细节。开发者的时间就这么节省出来了。

另外,保罗·格雷厄姆说:「一个功能所需的代码越多,就越难避免bug,也越难发现它们。」。写过C语言的人都知道,有时自己的程序运行达不到预期,排查来排查去,发现就是某行末尾少了一个分号。Python则没有这些问题,Python是以缩进规则表示代码块的开始或结束,而不是花括号或分号。也不会有类似Java的空指针问题,或者忘记回收内存导致内存泄漏。这些很底层的问题,Python解析器都帮你解决好了。

确实有的语言内核设计并不是很好,比如Python的全局解释锁。但是,Python有很多很强大很有用的函数库,可以用来解决开发者很多问题。在编程开发中,总有一些很琐碎普遍的问题,开发者需要花费大量的时间去解决,但是有了函数库之后,解决起来就变得容易多了。所以这些函数库比语言的核心还重要,也就是这个语言的生态。

Python是动态类型语言,也就是说,你可以给一个变量赋予整数类型,然后这个变量再赋值字符串类型,甚至一个函数也是可以的。而静态类型语言,比如C语言,则不允许你这样做,你在声明变量的时候,就需要确定好是整数类型还是字符串类型。

虽然使用静态语言这样可以防止bug,也可以帮助编译器生成更快的代码;但是这样也对程序构成了限制,无法更自由的编写程序。

自由是一把双刃剑。在Python界有一句名言:动态一时爽,重构火葬场。使用Python编写代码确实很爽,你不需要考虑任何数据类型,直接声明一个变量就可以使用,但是这个也给后期维护代码带来了麻烦。人是善忘的,前一秒你传入了字符串类型,下一秒你却当整型来处理,不怕开发时Python发出尖叫告诉你这里有bug,就怕在生产环境中直接掉进bug坑里出不来。

因此,Python在其3.5版本加入了类型提示的功能,可以给一些静态分析工具进行类型检查。之后一些优秀的函数库,比如Pydantic,你使用的时候强制需要你定义类型,也是为了保护好代码的可维护性。

与其争辩Python的性能,不如跳出圈外,关注点其他方面,比如面向对象编程

什么是面向对象编程?它和函数式编程相对应。一个程序员在接到一个要编写「毁灭地球」的任务的时候,他不会直接编写一个「毁灭地球」的函数,而是编写一个「毁灭行星」的函数,然后把「地球」传参进去。这个就是函数式编程。而面向对象编程,就是把「毁灭行星」这个函数,作为「宇宙」这个类的方法。

1
2
3
class Space:
def destroy_planet(self, planet):
...

面向对象编程的优点在于,如果你需要添加「毁灭恒星」的功能,那么只需要添加相应的方法就可以了,甚至可以不修改程序其他部分。

编程语言有静态和动态之分,对于面向对象编程,编程语言只有程度之分。目前只有两种程度的面向对象编程语言,一种是允许你面向对象编程,另一种是强迫你必须面向对象编程,比如Java,Java版本的Hello World,你必须先写一个Main的类,再写一个main方法,最后才能打印Hello World

1
2
3
4
5
public class Main {
public static void main(String[] args) {
System.out.println("Hello World");
}
}

保罗·格雷厄姆认为后一种语言是不可取的,我也是这么认为的。最好的方案是使用允许你面向对象编程的语言,最后编写代码的时候到底用不用,则是另外一个问题。这也是接下来我想探讨的。

在AI编程首期,我遇到了这么一个问题:「什么时候使用类去编程,什么时候使用函数去编程?」

我回答是,在我的开发经历当中,有几个地方是必须使用面向对象编程的。

第一个是编写ORM的代码的时候,就必须使用面向对象去编程。什么是ORM?就是数据库中的一张表映射为代码中的一个类,之后你对这个类的对象进行操作,就相当于操作这张表的数据了。

另一个是需要继承框架的一些方法才能运行的时候,比如使用PyQt编写桌面端应用程序,必须继承它的QtWidgets类,才能编写一个组件显示在界面上。

那么什么时候使用函数去编程?除了以上两种场景,其他情况都可以使用函数去编程。在web开发中,我更喜欢使用函数去实现HTTP接口,而不是类。除了实现接口,一些辅助函数,我也习惯使用函数去实现。但是如果遇到了复杂的业务规则,我就会使用类和方法来实现。因此我的一个准则是:简单的功能用函数实现,复杂的功能用类与方法来实现。

除了类与方法,还需要关注的最重要的一点就是数据库。面向对象编程可以跨语言讨论,但是SQL语言除外。千万不要拿面向对象编程的思维去设计数据表。

Python的ORM工具极其强大,你可以直接使用面向对象编程的方式,去设计一个个数据表对象,然后再迁移到数据库。但是,这是有害的!长期使用面向对象编程的思维方式去设计数据表,会忘记数据库的本质。

数据库的设计不讲究封装和继承那一套。更多考你的是如何把高维的业务规则,变为一张张二维数据表的名称和字段,以及如何更高效地查出数据,或者如何更有效地写入数据。

而且,大多数Web应用程序的并发性能压力,不是在Web框架,而是在数据库。这是你使用面向对象编程的思维方式无法解决的问题,也不是任一一个编程语言的问题。

写了那么多,如果要重点提醒初学者什么内容的话,那就是:对于半路出家学习编程的同学来说,不需要考虑Python的性能适不适合写程序这个问题。如果需要更快更强,必然是选择接近机器的语言。Python可以是你入门的第一门编程语言,但不是最后一个。除了性能,你需要更多考虑的是你的开发时间,你的数据库设计,你的软件作品。