Open WebUI

下载镜像

docker pull ghcr.io/open-webui/open-webui:main

运行

Docker Compose (Ollama)

编写配置文件:docker-compose.yml

version: '3'
services:
  openwebui:
    image: ghcr.io/open-webui/open-webui:main
    extra_hosts:
      - host.docker.internal:host-gateway    
    ports:
      - "3000:8080"
    volumes:
      - open-webui:/app/backend/data
volumes:
  open-webui:
docker compose up

Docker (OpenAI API)

vscode-extension-samples/chat-sample 源码分析

运行 Chat Sample

克隆仓库

git clone https://github.com/microsoft/vscode-extension-samples

安装依赖

cd vscode-extension-samples/chat-sample
npm install

调试

在 Debug View 中运行 Run Extension

Chat Sample 源码分析

扩展入口

文件:src/extension.ts

export function activate(context: vscode.ExtensionContext) {
    registerSimpleParticipant(context);
    registerToolUserChatParticipant(context);
    registerChatLibChatParticipant(context);

    registerChatTools(context);
}

注册参与者

文件:src/simple.ts

export function registerSimpleParticipant(context: vscode.ExtensionContext) {

}

Language Model API

The Language Model API enables you to use the Language Model and integrate AI-powered features and natural language processing in your Visual Studio Code extension.

语言模型 API 可以让您使用语言模型,并在您的 Visual Studio Code 扩展中集成 AI 功能和自然语言处理。

You can use the Language Model API in different types of extensions. A typical use for this API is in chat extensions, where you use a language model to interpret the user's request and help provide an answer. However, the use of the Language Model API is not limited to this scenario.

Chat Extensions (VS Code)

聊天用户体验的组成部分

下面的截图显示了示例扩展中 Visual Studio Code 聊天体验中的不同聊天概念。

  1. 使用 @ 语法调用 @cat 聊天参与者
  2. 使用 / 语法调用 /teach 命令
  3. 用户提供的查询,也称为用户提示
  4. 图标和参与者的 fullName,表示 Copilot 正在使用 @cat 聊天参与者
  5. @cat 提供的 Markdown 响应
  6. 包含在 Markdown 响应中的代码片段
  7. 包含在 @cat 响应中的按钮,按钮调用 VS Code 命令
  8. 聊天参与者提供的建议后续问题
  9. 聊天输入字段,其中的占位文本由聊天参与者的 description 属性提供

开发聊天扩展(chat extension)

聊天扩展是一种扩展,它向 Chat 视图提供了一个聊天参与者。

实现聊天扩展所需的最小功能是:

  • 注册聊天参与者,让用户可以在 VS Code Chat 视图中使用 @ 符号调用它。
  • 定义一个请求处理程序,解释用户的问题,并在 Chat 视图中返回响应。

您可以使用以下可选功能进一步扩展聊天扩展的功能:

  • 注册聊天命令,为用户提供常见问题的简写符号
  • 定义建议的后续问题,帮助用户继续对话

作为开发聊天扩展的起点,您可以参考我们的 chat extension sample。此示例实现了一个简单的猫导师,可以使用猫隐喻解释计算机科学主题。

GitHub Copilot in VS Code

GitHub Copilot

GitHub Copilot 你的 AI 编程伙伴,助你更快、更智能地编写代码。

UI 设计

Command Center

Inline Chat

Chat View

  • Conversation History

Quick Chat

Copilot Edits

Terminal Inline Chat

支持的 IDE

  • Visual Studio
  • Visual Studio Code
  • JetBrains IDEs
  • Xcode
  • Vim/Neovim
  • Azure Data Studio
  • Web browser(GitHub website)
  • Windows Terminal
  • GitHub Mobile

交互方式

Code Completions(代码完成)

Copilot 会在你输入时建议代码行,并为函数签名提供多行建议。注释中的提示会根据你期望的结果、逻辑和步骤提供具体的建议。

  1. 代码行建议
  2. 函数签名建议
  3. 注释中的提示

您可能不想接受 GitHub Copilot 的整个建议。您可以使用 ⌘→ 键盘快捷键来接受建议的下一个单词或下一行。

Inline Chat

Inline Chat 使您能够直接从编辑器与 Copilot 进行聊天对话,而无需离开您的工作上下文。使用 Inline Chat,您可以在代码中就地预览代码建议,这对于快速迭代代码更改非常有用。

Chat View

Mac 外接显示器 DELL U2723QE

硬件

Apple MacBook Pro 16 M2 Max

显示屏

  • Liquid 视网膜 XDR 显示屏
    • 16.2 英寸 (对角线) Liquid 视网膜 XDR 显示屏1;初始分辨率 3456 x 2234 (254 ppi)
  • XDR (极致动态范围)
    • 1000000:1 对比度
    • XDR 亮度:1000 尼特持续亮度 (全屏),1600 尼特峰值亮度2 (仅限 HDR 内容)
    • SDR 亮度:500 尼特
  • 色彩
    • 10 亿色彩
    • 广色域 (P3)
    • 原彩显示技术
  • 刷新率
    • ProMotion 自适应刷新率技术,最高可达 120Hz
    • 固定刷新率:47.95Hz、48.00Hz、50.00Hz、59.94Hz、60.00Hz

充电和外设扩展

左侧 右侧
左侧 右侧
  • SDXC 卡插槽
  • HDMI 端口
  • 3.5 毫米耳机插孔
  • MagSafe 3 端口
  • 三个雷雳 4 (USB-C) 端口,均可支持:
    • 充电
    • DisplayPort
    • 雷雳 4 (速率最高可达 40Gb/s)
    • USB 4 (速率最高可达 40Gb/s)

显示器支持 同时支持初始分辨率下的内置显示屏 (可显示 10 亿色彩) 以及: 最多达四台外接显示器:通过雷雳端口连接多达三台分辨率最高达 6K (60 Hz) 的外接显示器,同时通过 HDMI 端口连接一台分辨率最高达 4K (144Hz) 的外接显示器 最多达三台外接显示器:通过雷雳端口连接多达两台分辨率最高

Atlas 900 AI 集群

济南人工智能计算中心

AI 机房(Atlas 900 AI 集群)

  • 计算节点:由大量高性能服务器组成,搭载华为自研的昇腾处理器,提供强大的算力支持。
  • 高速互联网络:采用高速InfiniBand网络,实现节点之间的低延迟、高带宽通信。
  • 存储系统:配置分布式存储,满足海量数据的高速读写需求。
  • 管理调度系统:提供统一的资源管理和任务调度,提升集群的利用效率。
  • AI 软件平台:支持主流深度学习框架,提供完善的AI开发和部署环境。

384 张卡

电池间空调系统

  • 恒温恒湿空调:确保机房温度和湿度稳定,适应设备运行要求。
  • 动力环境监控:实时监测空调系统的运行状态,及时预警异常情况。
  • 冗余设计:配置备用空调设备,保障系统的连续运行。

制冷系统配电柜、UPS 系统

  • 配电柜:为制冷系统提供可靠的电力供应,具备过载和短路保护功能。
  • UPS 系统:配置不间断电源,防止电源中断对设备造成影响。
  • 电源监控:实时监测电力系统状态,确保供电稳定性。

水处理系统

  • 冷却水循环:维持制冷系统的正常运行,保证设备散热需求。
  • 水质处理设备:防止水垢和腐蚀,提高系统效率和寿命。
  • 泄漏检测:配置水 leak 检测传感器,及时发现和处理漏水问题。

路由器、交换机、防火墙

  • 核心路由器:连接内外网络,实现数据高速转发。
  • 高速交换机:构建集群内部网络,提供大带宽低延迟的通信环境。
  • 防火墙:实施网络安全策略,防护外部网络攻击和入侵。

Mac 外接显示器选购

Apple MacBook Pro 16 M2 Max

为我的 MacBook Pro 16 M2 Max 选择一款显示器

显示屏

Liquid 视网膜 XDR 显示屏

  • 14.2 英寸 (对角线) Liquid 视网膜 XDR 显示屏1;初始分辨率 3024 x 1964 (254 ppi)
  • 16.2 英寸 (对角线) Liquid 视网膜 XDR 显示屏1;初始分辨率 3456 x 2234 (254 ppi)

XDR (极致动态范围)

  • 1000000:1 对比度
  • XDR 亮度:1000 尼特持续亮度 (全屏),1600 尼特峰值亮度2 (仅限 HDR 内容)
  • SDR 亮度:500 尼特

色彩

  • 10 亿色彩
  • 广色域 (P3)
  • 原彩显示技术

刷新率

  • ProMotion 自适应刷新率技术,最高可达 120Hz
  • 固定刷新率:47.95Hz、48.00Hz、50.00Hz、59.94Hz、60.00Hz

充电和外设扩展

左侧

左侧

右侧

右侧

  • SDXC 卡插槽
  • HDMI 端口
  • 3.5 毫米耳机插孔
  • MagSafe 3 端口
  • 三个雷雳 4 (USB-C) 端口,均可支持:
    • 充电
    • DisplayPort
    • 雷雳 4 (速率最高可达 40Gb/s)
    • USB 4 (速率最高可达 40Gb/s)

显示器支持 同时支持初始分辨率下的内置显示屏 (可显示 10 亿色彩) 以及: 最多达四台外接显示器:通过雷雳端口连接多达三台分辨率最

华为 Atlas A2 上使用 LLaMA-Factory 模型微调

济南人工智能计算中心

菜单

  • 云资源
    • ModelArts
      • 开发环境
        • Notebook

创建 Notebook

  • 自定义镜像:llama2
  • 类型:ASCEND
  • 规格:Ascend: 8*Ascend910 ARM: 192核 768GB
  • 存储配置:云硬盘EVS
    • 磁盘规格:200GB

工作目录:/home/ma-user/work

下载模型

安装 modelscope

pip install --upgrade modelscope

SDK 下载模型脚本

编辑 download.py 文件

#模型下载
from modelscope import snapshot_download
model_dir = snapshot_download('Qwen/Qwen1.5-7B-Chat')

设置下载路径

export MODELSCOPE_CACHE=/home/ma-user/work

下载

python download.py

查看下载的模型

ll /home/ma-user/work/hub/Qwen/Qwen1___5-7B-Chat

修改模型配置文件

修改配置文件:Qwen/Qwen1___5-7B-Chat/config.json

{
  "torch_dtype": "float16",
}

NPU 不支持 bfloat16,模型配置文件需要修改为 float16

华为 Atlas A2 算力切分

算力切分

查询算力切分模式

sudo npu-smi info -t vnpu-mode
    vnpu-mode                      : docker

查询算力切分模板信息 sudo npu-smi info -t template-info +------------------------------------------------------------------------------------------+ |NPU instance template info is: | |Name AICORE Memory AICPU VPC VENC JPEGD | | GB PNGD VDEC JPEGE | |==========================================================================================| |vir10_3c_16g 10 16 3 4 0 12 | | 0 1 2 | +------------------------------------------------------------------------------------------+ |vir10_4c_16g_m 10 16 4 9 0 24 | | 0 2 4 | +---------------------------

LangChain Blog: In the Loop

What is an agent?

“什么是代理?”

几乎每天都会有人问我这个问题。在 LangChain,我们构建工具来帮助开发者构建 LLM 应用程序,特别是那些充当推理引擎并与外部数据和计算源交互的应用程序。这包括通常被称为“代理”的系统。

每个人似乎对代理都有稍微不同的定义。我的定义可能比大多数人更技术性:

💡 代理是一个使用 LLM 来决定应用程序控制流的系统。

即使在这里,我也承认我的定义并不完美。人们通常认为代理是高级的、自主的、类人的——但如果是一个简单的系统,LLM 在两个不同路径之间进行路由呢?这符合我的技术定义,但不符合人们对代理应具备能力的普遍看法。很难准确定义什么是代理!

这就是为什么我非常喜欢 Andrew Ng 上周的推文。在推文中,他建议“与其争论哪些工作应被包括或排除为真正的代理,我们可以承认系统可以有不同程度的代理性。”就像自动驾驶汽车有不同的自动化级别一样,我们也可以将代理能力视为一个光谱。我非常同意这个观点,我认为 Andrew 表达得很好。将来,当有人问我什么是代理时,我会转而讨论什么是“代理性”。

什么是代理性(agentic)?

去年我在 TED 演讲中谈到了 LLM 系统,并使用下面的幻灯片讨论了 LLM 应用程序中存在的不同自主级别。

一个系统越“代理性”,LLM 决定系统行为的程度就越高。

使用 LLM 将输入路由到特定的下游工作流中具有一些小的“

打包 Python 工程到 PyPI:构建 LLM 压测工具 evalscope-perf

创建 Python 工程 evalscope-perf

工程的目录结构

evalscope-perf/
├── evalscope_perf/
│   ├── __init__.py
│   └── main.py
├── README.md
├── LICENSE
├── pyproject.toml
└── setup.py

evalscope_perf/init.py

没有可以不写。

evalscope_perf/main.py import subprocess import re import typer import matplotlib.pyplot as plt from typing import List from typing_extensions import Annotated app = typer.

华为 Atlas 800I A2 服务器的大模型推理性能压测

大模型推理性能压测工具

安装 EvalScope

git clone https://github.com/modelscope/evalscope
cd evalscope

pip install -e .

压测命令的使用

evalscope perf \
    --api openai \
    --url 'http://127.0.0.1:1025/v1/chat/completions' \
    --model 'qwen' \
    --dataset openqa \
    --dataset-path './datasets/open_qa.jsonl' \
    --max-prompt-length 8000 \
    --stop '<|im_end|>' \
    --read-timeout=120 \
    --parallel 100 \
    -n 1000

--stream 不要加,经常出问题。

  • --read-timeout: 网络读取超时
  • --parallel: 并发数
  • -n: 请求数

数据集 中文聊天 HC3-Chinese mkdir datasets wget https://modelscope.cn/datasets/AI-ModelScope/HC3-Chinese/resolve/master/open_qa.

在华为 Atlas 800I A2 服务器上搭建大模型推理服务

华为昇腾 NPU 与英伟达 GPU 生态层级对比:

NPU GPU
CANN CUDA
MindSpore PyTorch
MindFormer Transformers
MindIE vLLM

下载大模型

cd /home/luruan/disk1/models

大型语言模型

  • Qwen1.5-7B
git clone https://www.modelscope.cn/Qwen/Qwen1.5-7B-Chat.git
  • Qwen2-7B ❌
git clone https://www.modelscope.cn/Qwen/Qwen2-7B-Instruct.git
  • Qwen2-72B
git clone https://www.modelscope.cn/Qwen/Qwen2-72B-Instruct.git

代码大模型

  • DeepSeek-Coder-6.7B
git clone https://www.modelscope.cn/deepseek-ai/deepseek-coder-6.7b-instruct.git
  • StarCoder2-15B ❌
git clone https://www.modelscope.cn/AI-ModelScope/starcoder2-15b.git
  • CodeGeeX2-6B ❌
git clone https://www.modelscope.cn/ZhipuAI/codegeex2-6b.git

OpenAI API Compatibility

设置 API Key

export LITELLM_API_KEY=sk-1234

服务端口

  • Ollama: 11434
  • LiteLLM: 4000
  • XInference: 9997
  • MindIE: 1025

models

Ollama

curl -s http://localhost:11434/v1/models \
    | jq -r '.data[].id'
  • curl -s: -s 选项表示静默模式,不输出进度信息。
  • jq -r: -r 选项表示以原始格式输出,去掉了引号。

LiteLLM

curl -s http://localhost:4000/v1/models \
    -H "Authorization: Bearer $LITELLM_API_KEY" \
    | jq -r '.data[].id'

在 Bash 中,单引号和双引号的使用有一些重要的区别:

  • 单引号 (')
    • 完全字面值:单引号内的内容被视为字面值,不会对其中的任何字符进行扩展或解析。
    • 变量不扩展:在单引号内,变量不会被解析。例如,'LITELLMAPIKEY会被视为字符LITELLM_API_KEY' 会被视为字符串 'LITELLM_API_KEY',而不是变量的值。
    echo '$LITELLM_API_KEY'  # 输出: $LITELLM_API_KEY
    

部署 LLM 多 LoRA 适配器的推理服务

Text Generation Inference

conda create -n text-generation-inference python=3.9
conda activate text-generation-inference

git clone https://github.com/huggingface/text-generation-inference.git && cd text-generation-inference
BUILD_EXTENSIONS=True make install

vLLM

conda create -n vllm python=3.10 -y
conda activate vllm
pip install vllm
cd ~/HuggingFace/mistralai/Mistral-7B-v0.1
git clone https://huggingface.co/predibase/magicoder adapters/magicoder
vllm serve `pwd` \
    --enable-lora \
    --lora-modules magicoder=`pwd`/adapters/magicoder

推测解码 (Speculative Decoding)

Speculative Decoding

  1. 初步生成:使用一个小而快速的模型(称为Mq),生成一系列初步的 tokens。这个模型很高效,所以能快速得到结果。
  2. 并行评估:接着,使用一个更大的目标模型(称为Mp)来同时评估Mq生成的所有 tokens。Mp会判断每个 token 的概率,选择那些可能性高的结果。
  3. 修正输出:对于那些被Mq生成但被Mp拒绝的低概率 token,Mp会提供新的替代 token。这一步确保了输出的质量,同时提高了生成的速度。
  • Serving AI models faster with speculative decoding
    1. 生成多个猜测候选: 使用一个更小更高效的"草稿"模型或者是主模型本身的最后一层,生成多个可能的下一个token作为猜测。
    2. 并行评估猜测: 利用主要的大型语言模型(LLM)并行地对这些猜测进行评估,计算每个猜测的概率分布。
    3. 接受或拒绝猜测: 通过比较每个猜测在 LLM 和草稿模型下的概率,以及生成一个随机数进行判断,决定是否接受该猜测。
    4. 调整并重采样: 如果所有猜测都被接受,则直接从 LLM 采样下一个token。如果有猜测被拒绝,则从调整后的概率分布中重新采样被拒绝的猜测。
    5. 输出结果: 最终输出包括所有被接受的猜测以及从 LLM 采样或重采样得到的token。

Reader-LM: 用于清理和转换 HTML 到 Markdown 的小型语言模型

Reader-LM

不能简单地将 HTML 把输入给模型(Reader-LM),因为效果不理想。

Reader-LM-0.5B 和 Reader-LM-1.5B 是受 Jina Reader 启发的两个新型小型语言模型,旨在将来自开放网络的原始、嘈杂的 HTML 转换为干净的 markdown。

使用小型语言模型替换了 readability + turndown + regex 启发式的管道。

Jina Reader 是一个简单的 API,只需一个简单的前缀:r.jina.ai,就可以将任何 URL 转换为 LLM 友好的 markdown。

Jina Embeddings V3

jina-embeddings-v3 的架构基于 XLM-RoBERTa 模型,并进行了几项关键修改。

LLM 的合成数据

Cosmopedia: 如何为预训练构建大规模合成数据集

本文档的专注点是如何将样本从 几千 扩展到 数百万,从而使其可用于 从头开始预训练 LLM。深入研究了创建数据集的方法、提示整编的方法及相应的技术栈。

Cosmopedia

Cosmopedia 的目的是重现 Phi-1.5 所使用的训练数据。

围绕在 Phi 数据集上的谜团除了我们对其如何创建的不甚了了之外,还有一个问题是其数据集的生成使用的是私有模型。为了解决这些问题,我们引入了 Cosmopedia,这是由 Mixtral-8x7B-Instruct-v0.1 生成的包含教科书、博文、故事、帖子以及 WikiHow 文章等各种体裁的合成数据集。其中有超过 3000 万个文件、250 亿个词元,是迄今为止最大的开放合成数据集。

实际上 Cosmopedia 的大部分时间都花在了细致的提示词工程上了。