Skip to main content

⚡ 生产环境最佳实践

1. 使用此config.yaml

在生产环境中使用此config.yaml(使用你自己的LLMs)

model_list:
- model_name: fake-openai-endpoint
litellm_params:
model: openai/fake
api_key: fake-key
api_base: https://exampleopenaiendpoint-production.up.railway.app/

general_settings:
master_key: sk-1234 # 输入你自己的主密钥,确保它以'sk-'开头
alerting: ["slack"] # 设置Slack报警 - 获取LLM异常、预算警报、慢速LLM响应的警报
proxy_batch_write_at: 60 # 每60秒批量写入消费更新
database_connection_pool_limit: 10 # 将数据库连接数限制为 = 最大数据库连接数/litellm代理实例数(大约10-20是一个好的数字)

litellm_settings:
set_verbose: False # 关闭调试日志记录,确保你的日志中没有任何调试信息
json_logs: true # 以json格式获取调试日志

在环境中设置Slack webhook URL

export SLACK_WEBHOOK_URL="https://hooks.slack.com/services/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"

关闭FASTAPI的默认信息日志

export LITELLM_LOG="ERROR"
info

需要帮助或想要专属支持?与创始人交谈 [这里]: (https://calendly.com/d/4mp-gd3-k5k/litellm-1-1-onboarding-chat)

2. 在Kubernetes上 - 使用1个Uvicorn worker [建议的CMD]

使用此Docker CMD。这将启动带有1个Uvicorn异步Worker的代理

(确保你未在CMD中设置run_gunicornnum_workers)。

CMD ["--port", "4000", "--config", "./proxy_server_config.yaml"]

3. 使用Redis的'port','host', 'password'。不要使用'redis_url'

如果你决定使用Redis,请不要使用'redis_url'。我们推荐使用Redis的端口、主机和密码参数。

redis_url比80 RPS慢

这仍然是我们正在调查的内容。请在此处跟踪 这里

建议在生产环境中这样做:

router_settings:
routing_strategy: usage-based-routing-v2
# redis_url: "os.environ/REDIS_URL"
redis_host: os.environ/REDIS_HOST
redis_port: os.environ/REDIS_PORT
redis_password: os.environ/REDIS_PASSWORD

litellm_settings:
cache: True
cache_params:
type: redis
host: os.environ/REDIS_HOST
port: os.environ/REDIS_PORT
password: os.environ/REDIS_PASSWORD

4. 禁用'load_dotenv'

设置 export LITELLM_MODE="PRODUCTION"

这将禁用load_dotenv()功能,该功能会自动从本地的.env加载环境凭证。

5. 设置LiteLLM Salt Key

如果你计划使用数据库,请为加密/解密数据库中的变量设置一个salt键。

在添加模型后不要更改此设置。它用于加密/解密你的LLM API密钥凭证

我们推荐 - https://1password.com/password-generator/ 密码生成器来获取一个随机的litellm salt键哈希。

export LITELLM_SALT_KEY="sk-1234"

查看代码

额外内容

生产环境中的预期性能

1个LiteLLM Uvicorn Worker在Kubernetes上

描述
平均延迟50ms
中位数延迟51ms
/chat/completions 每秒请求数100
/chat/completions 每分钟请求数6000
/chat/completions 每小时请求数360K

验证调试日志已关闭

在代理服务器上,你应仅看到以下详细级别的日志

# INFO:     192.168.2.205:11774 - "POST /chat/completions HTTP/1.1" 200 OK
# INFO: 192.168.2.205:34717 - "POST /chat/completions HTTP/1.1" 200 OK
# INFO: 192.168.2.205:29734 - "POST /chat/completions HTTP/1.1" 200 OK

部署LiteLLM的机器规格

服务规格CPU内存架构版本
服务器t2.small1vCPUs8GBx86
Redis缓存----7.0+ Redis引擎

参考Kubernetes部署YAML

我们进行负载测试的参考Kubernetes deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
name: litellm-deployment
spec:
replicas: 3
selector:
matchLabels:
app: litellm
template:
metadata:
labels:
app: litellm
spec:
containers:
- name: litellm-container
image: ghcr.io/berriai/litellm:main-latest
imagePullPolicy: Always
env:
- name: AZURE_API_KEY
value: "d6******"
- name: AZURE_API_BASE
value: "https://ope******"
- name: LITELLM_MASTER_KEY
value: "sk-1234"
- name: DATABASE_URL
value: "po**********"
args:
- "--config"
- "/app/proxy_config.yaml" # 更新配置文件的挂载路径
volumeMounts: # 为proxy_config.yaml定义卷挂载
- name: config-volume
mountPath: /app
readOnly: true
livenessProbe:
httpGet:
path: /health/liveliness
port: 4000
initialDelaySeconds: 120
periodSeconds: 15
successThreshold: 1
failureThreshold: 3
timeoutSeconds: 10
readinessProbe:
httpGet:
path: /health/readiness
port: 4000
initialDelaySeconds: 120
periodSeconds: 15
successThreshold: 1
failureThreshold: 3
timeoutSeconds: 10
volumes: # 为proxy_config.yaml定义卷挂载
- name: config-volume
configMap:
name: litellm-config

参考 Kubernetes service.yaml,由我们进行过负载测试

apiVersion: v1
kind: Service
metadata:
name: litellm-service
spec:
selector:
app: litellm
ports:
- protocol: TCP
port: 4000
targetPort: 4000
type: LoadBalancer
优云智算