one-api icon indicating copy to clipboard operation
one-api copied to clipboard

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

Open leavegee opened this issue 1 year ago • 13 comments

报错信息如下 [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

leavegee avatar Nov 07 '23 08:11 leavegee

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

uestcsongtaoli avatar Nov 08 '23 01:11 uestcsongtaoli

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

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

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

wzxjohn avatar Nov 08 '23 01:11 wzxjohn

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

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

uestcsongtaoli avatar Nov 08 '23 07:11 uestcsongtaoli

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

songquanpeng avatar Nov 08 '23 11:11 songquanpeng

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

uestcsongtaoli avatar Nov 09 '23 01:11 uestcsongtaoli

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

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

sangd1989 avatar Nov 14 '23 03:11 sangd1989

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

wpt1225 avatar Dec 19 '23 14:12 wpt1225

参考: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

xinaiwunai avatar Dec 20 '23 08:12 xinaiwunai

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

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

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

ZhengHui-Z avatar Dec 29 '23 11:12 ZhengHui-Z

感谢,我先,在线运行容器,然后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

Kaiwen6 avatar Jan 16 '24 03:01 Kaiwen6

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

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

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

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

password36 avatar Mar 29 '24 08:03 password36

我解决了:

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

yixian3500 avatar Mar 29 '24 13:03 yixian3500

9b5ad71b2ce5302211f9c61530b329a4922fc6a4

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

luommy avatar May 15 '24 12:05 luommy

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

leavegee avatar May 28 '24 08:05 leavegee

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

weixiewen avatar Jun 03 '24 02:06 weixiewen

@weixiewen 感谢!

OwenWo0 avatar Jun 04 '24 09:06 OwenWo0