songquanpeng / one-api

OpenAI 接口管理 & 分发系统,支持 Azure、Anthropic Claude、Google PaLM 2 & Gemini、智谱 ChatGLM、百度文心一言、讯飞星火认知、阿里通义千问、360 智脑以及腾讯混元,可用于二次分发管理 key,仅单可执行文件,已打包好 Docker 镜像,一键部署,开箱即用. OpenAI key management & redistribution system, using a single API for all LLMs, and features an English UI.
https://openai.justsong.cn/
MIT License
17.47k stars 3.98k forks source link

docker 离线环境下部署无法启动成功 #680

Open leavegee opened 9 months ago

leavegee commented 9 months ago

报错信息如下 [FATAL] 2023/11/07 - 16:00:40 | [failed to get gpt-3.5-turbo token encoder: Get "https://openaipublic.blob.core.windows.net/encodings/cl100k_base.tiktoken": dial tcp 20.150.77.132:443: i/o timeout] [SYS] 2023/11/07 - 16:00:41 | One API v0.5.8-alpha started [SYS] 2023/11/07 - 16:00:41 | SQL_DSN not set, using SQLite as database [SYS] 2023/11/07 - 16:00:41 | database migration started [SYS] 2023/11/07 - 16:00:41 | database migrated [SYS] 2023/11/07 - 16:00:41 | REDIS_CONN_STRING not set, Redis is not enabled [SYS] 2023/11/07 - 16:00:41 | initializing token encoder

无限重复, 启动失败 无法访问

启动命令如下 docker run --name one-api -d --restart always -p 3001:3000 -e TZ=Asia/Shanghai -e TIKTOKEN_CACHE_DIR=data/one-api/cache -v one-api:/data one-api:v0.5.8-alpha dd34371c513701e624bb76f9f17e2fe0995bf8cafd7f047f42a42e10b1d24da7

uestcsongtaoli commented 9 months ago

同样的问题, 离线部署,启动失败。 镜像id 2d660

wzxjohn commented 9 months ago

Token 数量计算库需要联网下载词库文件。如果需要离线启动,参考说明自行处理。

TIKTOKEN_CACHE_DIR:默认程序启动时会联网下载一些通用的词元的编码,如:gpt-3.5-turbo,在一些网络环境不稳定,或者离线情况,可能会导致启动有问题,可以配置此目录缓存数据,可迁移到离线环境。

另外好奇问一句,离线启动,那这个项目的意义在哪?不能联网怎么调 API 啊?

uestcsongtaoli commented 9 months ago

感谢,看到了。 我下载了gpt-3.5-turbo 的tiktoken 放在挂载的目录下,设置好环境变量。启动还是失败。

离线问题,大模型也是离线部署的。

songquanpeng commented 9 months ago

你先正常部署一下,看应该是什么格式放过去

uestcsongtaoli commented 9 months ago

感谢,我先,在线运行容器,然后export导出整个container. 问题解决。

sangd1989 commented 9 months ago

感谢,我先,在线运行容器,然后export导出整个container. 问题解决。

我也碰到了这个问题,具体要怎么操作

wpt1225 commented 8 months ago

用镜像加参数的方式不能解决,导出整个container. 可以解决

xinaiwunai commented 8 months ago

参考:https://zhuanlan.zhihu.com/p/637233783?utm_id=0

第一次调用encoding_for_model()时,编码数据将通过HTTP从 http://openaipublic.blob.core.windows.net Azure Blob存储桶(storage bucket)获取(代码:https://github.com/openai/tiktoken/blob/0.4.0/tiktoken_ext/openai_public.py)。这些数据会被缓存在临时目录中,但如果机器重新启动,该目录将被清除。你可通过设置 TIKTOKEN_CACHE_DIR环境变量来强制使用更持久的缓存目录。

参考tiktoken源码:

... 

def read_file_cached(blobpath: str) -> bytes:
    user_specified_cache = True
    if "TIKTOKEN_CACHE_DIR" in os.environ:
        cache_dir = os.environ["TIKTOKEN_CACHE_DIR"]
    elif "DATA_GYM_CACHE_DIR" in os.environ:
        cache_dir = os.environ["DATA_GYM_CACHE_DIR"]
    else:
        cache_dir = os.path.join(tempfile.gettempdir(), "data-gym-cache")
        user_specified_cache = False

    if cache_dir == "":
        # disable caching
        return read_file(blobpath)

    cache_key = hashlib.sha1(blobpath.encode()).hexdigest()

    cache_path = os.path.join(cache_dir, cache_key)
    if os.path.exists(cache_path):
        with open(cache_path, "rb") as f:
            return f.read()

    contents = read_file(blobpath)

    try:
        os.makedirs(cache_dir, exist_ok=True)
        tmp_filename = cache_path + "." + str(uuid.uuid4()) + ".tmp"
        with open(tmp_filename, "wb") as f:
            f.write(contents)
        os.rename(tmp_filename, cache_path)
    except OSError:
        # don't raise if we can't write to the default cache, e.g. issue #75
        if user_specified_cache:
            raise

    return contents

...

解决方案:

拷贝所需的文件: 9b5ad71b2ce5302211f9c61530b329a4922fc6a4 放在内网服务器one-api项目的docker-compose.yml文件同目录下, 编辑vim docker-compose.yml, 在one-api服务的volumns下添加挂载:

     volumes:
        - ./data/oneapi:/data
        - ./logs:/app/logs
        - ./9b5ad71b2ce5302211f9c61530b329a4922fc6a4:/tmp/data-gym-cache/9b5ad71b2ce5302211f9c61530b329a4922fc6a4
ZhengHui-Z commented 8 months ago

感谢,看到了。 我下载了gpt-3.5-turbo 的tiktoken 放在挂载的目录下,设置好环境变量。启动还是失败。

离线问题,大模型也是离线部署的。

私有化模型统一管理有这个需求

Kaiwen6 commented 7 months ago

感谢,我先,在线运行容器,然后export导出整个container. 问题解决。

我也碰到了这个问题,具体要怎么操作

在本地跑成功,之后docker export xxx -o xxx.tar.gz导出,将镜像移到离线服务器 docker import /path/xxx.tar.gz加载,最后docker run --name one-api -it --restart always -p 3001:3000 -e TZ=Asia/Shanghai -v /home/ubuntu/fastgpt/api-log:/data --privileged 镜像名称 sh -c ./one-api --port 3000 --log-dir ./logs

password36 commented 5 months ago

Token 数量计算库需要联网下载词库文件。如果需要离线启动,参考说明自行处理。

TIKTOKEN_CACHE_DIR:默认程序启动时会联网下载一些通用的词元的编码,如:gpt-3.5-turbo,在一些网络环境不稳定,或者离线情况,可能会导致启动有问题,可以配置此目录缓存数据,可迁移到离线环境。

另外好奇问一句,离线启动,那这个项目的意义在哪?不能联网怎么调 API 啊?

本地部署模型,对公领域对数据敏感性很高的

yixian3500 commented 5 months ago

我解决了:

docker命令是sudo docker run --name one-api -d --restart always -p 3001:3000 -e TZ=Asia/Shanghai -e TIKTOKEN_CACHE_DIR=home/yx/projects/data/one-api/cache -v /home/yx/projects/data/one-api:/data justsong/one-api

home/yx/projects/data/one-api/cache下是从这里下载的文件https://openaipublic.blob.core.windows.net/encodings/cl100k_base.tiktoken

luommy commented 3 months ago

9b5ad71b2ce5302211f9c61530b329a4922fc6a4

请问9b5ad71b2ce5302211f9c61530b329a4922fc6a4 是怎么确定的? 为何不是cl100k_base.tiktoken原名

leavegee commented 3 months ago

文件也不大, 建议打包在镜像里, 减少依赖; 有的地方是不能随意访问外网的, 得专门开通才可以.

weixiewen commented 2 months ago

新版本两个包 9b5ad71b2ce5302211f9c61530b329a4922fc6a4 fb374d419588a4632f3f557e76b4b70aebbca790 在/tmp/data-gym-cache目录下

OwenWo0 commented 2 months ago

@weixiewen 感谢!