人工智能时代的软件 (Software in the era of AI) - Andrej Karpathy
主要介绍了软件开发领域正在经历的重大变革,将其分为软件1.0(传统手工编码)、软件2.0(基于神经网络权重训练)和软件3.0(通过自然语言提示编程大型语言模型)。演讲者将大型语言模型(LLMs)比作新型操作系统和基础设施,指出它们既具备公用事业的性质(按量付费、集中式),也展现出类似芯片制造厂和操作系统的特征,且目前仍处于早期阶段(类似于1960年代的计算)。进一步探讨了LLMs的认知特性(如广博知识、幻觉、记忆局限),并强调了开发部分自主应用的重要性,这些应用能让人类通过图形用户界面和自主性滑块有效监督AI。最后,演讲者提出,随着自然语言编程的兴起,人人皆可编程,并呼吁开发者为智能体优化数字基础设施和文档,预示着一个由人类与AI协作构建的 “钢铁侠战衣”式未来。
Software is changing. (again)
Map of GitHub
Map of GitHub 是一个创新的数据可视化项目,旨在以交互式地图的形式展示 GitHub 上的开源项目生态。该项目由开发者 Anvaka 创建,通过复杂的算法和可视化技术,将超过 400,000 个 GitHub 仓库以节点和连接的形式呈现,帮助用户探索项目之间的关联、技术趋势以及开源社区的演变。
Software 2.0
Software 3.0
Part 1: 如何思考 LLM
LLM 具有公用事业的特性
英文 | 中文 |
---|---|
CAPEX to train an LLM (~= to build the grid) | 训练 LLM 的资本支出 (CAPEX)(≈ 建设电网) |
OPEX to serve intelligence over increasingly homogeneous API (prompt, image, tools, …) | 通过日益同质化的 API(提示、图像、工具等)提供智能的运营支出 (OPEX) |
Metered access ($/1M tokens) | 按使用量计费(每百万 Token 1 美元) |
Demand for low latency, high uptime, consistent quality (~= demanding consistent voltage from grid) | 对低延迟、高正常运行时间、一致质量的需求(≈ 要求电网提供一致的电压) |
OpenRouter ~= Transfer Switch (grid, solar, battery, generator…) | OpenRouter ≈ 传输开关(电网、太阳能、电池、发电机…) |
Intelligence “brownouts” e.g. when OpenAI goes down. | 智能“限电”(brownouts),例如当 OpenAI 宕机时 |
LLM 具有晶圆厂的特性
英文 | 中文 |
---|---|
Huge CAPEX | 巨额资本支出 (CAPEX) |
Deep tech tree R&D, secrets | 深度技术树研发,秘密 |
4nm process node ~= 10^20 FLOPS cluster | 4纳米工艺节点 ≈ 10^20 FLOPS 计算集群 |
Anyone training on NVIDIA GPUs ~= fabless | 任何使用 NVIDIA GPU 训练的人 ≈ 无晶圆厂 |
Google training on TPUs ~= owns fab (e.g. Intel) | 谷歌在 TPU 上训练 ≈ 拥有晶圆厂(例如英特尔) |
e.g. xAI Colossus cluster (100K H100 GPUs) | 例如:xAI Colossus 集群 (10万块 H100 GPU) |
LLM 具有操作系统的特性
英文 | 中文 |
---|---|
LLMs are increasingly complex software ecosystems, not simple commodities like electricity. | LLM 是日益复杂的软件生态系统,而非像电力一样的简单商品。 |
LLMs are Software. Trivial to copy & paste, manipulate, change, distribute, open source, steal…, not physical infrastructure. | LLM 是软件。易于复制和粘贴、操作、更改、分发、开源、窃取…,而非物理基础设施。 |
Some amount of switching friction due to different features, performance, style, capabilities etc. per domain. | 由于不同领域的功能、性能、风格、能力等差异,存在一定的切换摩擦。 |
System/user (prompt) space ~= kernel/user (memory) space | 系统/用户(提示)空间 ≈ 内核/用户(内存)空间 |
LLM OS
- Peripheral devices I/O (外围设备输入/输出):
- video (视频):可能指视频输入/输出功能,比如处理图像或视频数据。
- audio (音频):可能指音频输入/输出功能,比如语音识别或语音合成。
- CPU:在这里被LLM取代,或者说LLM扮演了传统CPU的角色,作为系统的核心处理单元。
- LLM (大型语言模型):系统的核心。
- RAM (内存):与LLM紧密相连,代表LLM的短期记忆。
- context window (上下文窗口):RAM中的一部分,是LLM当前处理信息的“工作区”,它的大小限制了LLM一次性可以处理的上下文信息量。
- Software 1.0 tools “classical computer” (1.0版本软件工具“经典计算机”):
- Calculator (计算器):用于数学计算。
- Python interpreter (Python解释器):用于执行Python代码。
- Terminal (终端):命令行界面。
- Disk (磁盘):
- File system (+embeddings):
- 用于存储数据和文件。
- “+embeddings”可能意味着文件系统不仅存储原始数据,还存储这些数据的向量嵌入(embeddings),以便LLM能更高效地理解和检索信息。
- File system (+embeddings):
- Ethernet (以太网):代表网络连接,允许LLM与外部世界通信。
- Browser (浏览器):LLM可以通过浏览器访问互联网信息。
- Other LLMs (其他大型语言模型):LLM可以与其他LLM进行交互,可能用于协同工作或获取不同来源的信息。
1950年代 - 1970年代 分时时代
我们正处于大型机和分时计算时代。 集中式、昂贵的计算机 =>
- 操作系统在云端运行
- 输入/输出通过网络来回传输
- 计算是按用户批处理的
Part 2: LLM 心理学
Part 3: 机遇
Vibe coding(氛围编码)
有一种新的编码方式我称之为“氛围编码”(vibe coding),你完全沉浸在氛围中,拥抱指数级增长,并且忘记了代码的存在。这之所以可能,是因为大型语言模型(LLM)(例如 Cursor Composer w Sonnet)变得太好了。我还与 Composer 使用 SuperWhisper 对话,所以我几乎都不碰键盘。我问一些最蠢的事情,比如“将侧边栏的填充减少一半”,因为我懒得找它。我总是“接受所有”,我不再阅读差异。当我收到错误消息时,我只是复制粘贴它们,不加评论,通常就能解决。代码的增长超出了我通常的理解范围,我需要真正阅读一段时间。有时 LLM 无法修复 bug,所以我只是绕开它,或者要求随机更改,直到它消失。这对于一次性项目来说还不错,但仍然相当有趣。我正在构建一个项目或网络应用,但这并不是真正的编码——我只是看东西,说东西,运行东西,复制粘贴东西,而且它大部分都能工作。
数字信息的新型消费者/操作者:
- 人类 (图形用户界面 GUI)
- 计算机 (应用程序接口 API)
- 新增: 代理程序 <- 计算机… 但类似人类