leptonai学习笔记

Posted by iceyao on Wednesday, July 17, 2024

leptonai简介

Lepton AI是一个云原生AI平台,提供了便捷的python sdk和命令行工具,能够在分钟级别高效运行AI应用。Lepton AI平台链接

QuickStart体验

Python虚拟环境

这里选用python 3.11版本

conda create --name leptonai python=3.11
conda activate leptonai

安装leptonai库

git clone https://github.com/leptonai/leptonai.git
cd leptonai
pip install -e .
pip install transformers torch

本地运行模型

Lepton有个photon的概念,这一概念来将运行人工智能模型的代码、其依赖项以及其他杂项内容捆绑在一起。可以近似将其视为一个Docker容器,但它更轻量且专为人工智能定制

创建一个名为mygpt2的photon,实际上是下载gpt2模型

lep photon create --name mygpt2 --model hf:gpt2

本地运行mygpt2,默认监听在本地的8080端口

# 代理下载模型
export HF_ENDPOINT=https://hf-mirror.com
lep photon runlocal --name mygpt2

本地也会起一个swagger apiserver:http://0.0.0.0:8080/docs

curl请求验证

curl -X 'POST' \
  'http://0.0.0.0:8080/run' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
  "inputs": "Once upon a time"
}'

部署到Lepton AI平台

需要先登录输入凭证

lep login

推送mygpt2 photon到Lepton AI平台

lep photon push --name mygpt2

创建一个deployment,实际上是photon的一个实例

lep photon run --name mygpt2 --deployment-name mygpt2

管理deployment

lep deployment list
lep deployment status --name mygpt2

清理资源

lep deployment remove --name mygpt2
lep photon remove --name mygpt2

leptonai客户端

https://github.com/leptonai/leptonai:leptonai库其实是一个python sdk,与Lepton AI平台交互,本身也提供命令行工具交互。

用lep命令行的python脚本作为vscode debug启动入口

#!/opt/anaconda3/envs/leptonai/bin/python
# -*- coding: utf-8 -*-
import re
import sys
from leptonai.cli import lep
if __name__ == '__main__':
    sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
    sys.exit(lep())

整体代码是客户端代码,跟server端进行交互,代码调试也很方便。可作为命令行工具实现参考的开源项目

lepton AI搜索

leptonai/search_with_lepton项目可以近似认为AI搜索的简易版,实质是大模型结合搜索,不过需要与 leptonai交互,search4all是基于search_with_lepton的改进版,与leptonai解耦。搜索对接支持SEARCH1API,BING,GOOGLE,SERPER,SEARCHAPI,SEARXNG。

SEARXNG部署

SEARXNG是一个开源免费搜索平台,可以私有化部署,使用docker-compose方式

克隆searxng-docker项目

cd /usr/local
git clone https://github.com/searxng/searxng-docker.git
cd searxng-docker

编辑环境变量配置,这里使用私有ip访问,不使用域名,不对公网提供服务

[root@k8s-1 searxng-docker]# vim .env
SEARXNG_HOSTNAME=search.xxx.com  # 随便填个

编辑settings.yml,更多配置参数参考searxng settings.yml

[root@k8s-1 searxng-docker]# vim searxng/settings.yml 
use_default_settings: true
server:
  # base_url is defined in the SEARXNG_BASE_URL environment variable, see .env and docker-compose.yml
  secret_key: "ultrasecretkey"  # change this!
  limiter: false  # can be disabled for a private instance
  image_proxy: false
ui:
  static_use_hash: true
redis:
  url: redis://redis:6379/0
search:
  formats:
    - html
    - json
outgoing:
  # default timeout in seconds, can be override by engine
  request_timeout: 6.0
  # the maximum timeout in seconds
  max_request_timeout: 10.0
  proxies:
    all://:
      - http://<你代理地址>:7890  # 用于访问google
[root@k8s-1 searxng-docker]#
sed -i "s|ultrasecretkey|$(openssl rand -hex 32)|g" searxng/settings.yml

编辑docker-compose.yaml,注释caddy段,这里不用域名,所以不需要caddy

[root@k8s-1 searxng-docker]# vim docker-compose.yaml 
version: "3.7"

services:
#  caddy:
#    container_name: caddy
#    image: docker.io/library/caddy:2-alpine
#    network_mode: host
#    restart: unless-stopped
#    volumes:
#      - ./Caddyfile:/etc/caddy/Caddyfile:ro
#      - caddy-data:/data:rw
#      - caddy-config:/config:rw
#    environment:
#      - SEARXNG_HOSTNAME=${SEARXNG_HOSTNAME:-http://localhost:80}
#      - SEARXNG_TLS=${LETSENCRYPT_EMAIL:-internal}
#    cap_drop:
#      - ALL
#    cap_add:
#      - NET_BIND_SERVICE
#    logging:
#      driver: "json-file"
#      options:
#        max-size: "1m"
#        max-file: "1"

  redis:
    container_name: redis
    image: docker.io/valkey/valkey:7-alpine
    command: valkey-server --save 30 1 --loglevel warning
    restart: unless-stopped
    networks:
      - searxng
    volumes:
      - valkey-data2:/data
    cap_drop:
      - ALL
    cap_add:
      - SETGID
      - SETUID
      - DAC_OVERRIDE
    logging:
      driver: "json-file"
      options:
        max-size: "1m"
        max-file: "1"

  searxng:
    container_name: searxng
    image: docker.io/searxng/searxng:latest
    restart: unless-stopped
    networks:
      - searxng
    ports:
      - "0.0.0.0:8080:8080"
    volumes:
      - ./searxng:/etc/searxng:rw
    environment:
      - SEARXNG_BASE_URL=http://172.16.80.60:8080
    cap_drop:
      - ALL
    cap_add:
      - CHOWN
      - SETGID
      - SETUID
    logging:
      driver: "json-file"
      options:
        max-size: "1m"
        max-file: "1"

networks:
  searxng:

volumes:
#  caddy-data:
#  caddy-config:
  valkey-data2:

启动searxng

[root@k8s-1 searxng-docker]# docker-compose up -d

AI搜索同类项目

search4all

search4all fastapi代替sanic的实现: https://github.com/yaoice/search4all/tree/use-fastapi

MindSearch

MindSearch 是一个具有Perplexity.ai Pro性能的开源AI搜索引擎框架。它支持使用闭源的 LLMs(如 GPT、Claude)或开源的LLMs(如 InternLM2.5–7b–chat)进行部署。具有多种强大功能和特点,包括能回答各种问题、进行深度知识发现、提供详细解决方案路径、优化的用户界面体验、动态图构建过程等。 https://github.com/InternLM/MindSearch

「真诚赞赏,手留余香」

爱折腾的工程师

真诚赞赏,手留余香

使用微信扫描二维码完成支付