如何在离线模式电脑上使用tiktoken

SiS*_*iSi 4 python tokenize gpt-3

import tiktoken

tokenizer = tiktoken.get_encoding("cl100k_base") tokenizer = tiktoken.encoding_for_model("gpt-3.5-turbo")

text = "Hello, nice to meet you"

tokenizer.encode(text)

Run Code Online (Sandbox Code Playgroud)

这一直显示名为 requests.exceptions.SSLError 的错误。由 SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] 证书验证失败:证书链中的自签名证书 (_ssl.c:1002)')) ... 引起。

我想运行这段代码来查看令牌的数量。但正如我之前提到的,它一直显示错误。我缺少什么代码?

小智 16

TL;DR 更新了 tiktoken 和 cl100k_base

截至撰写本文时应有效

  1. 下载此文件到您的本地计算机上
  2. 将其重命名为9b5ad71b2ce5302211f9c61530b329a4922fc6a4
  3. 传输到远程计算机上名为“tiktoken_cache”的文件夹中
  4. 每次需要使用tiktoken时运行以下代码
import os

tiktoken_cache_dir = "path_to_tiktoken_cache_folder"
os.environ["TIKTOKEN_CACHE_DIR"] = tiktoken_cache_dir

# validate
assert os.path.exists(os.path.join(tiktoken_cache_dir,"9b5ad71b2ce5302211f9c61530b329a4922fc6a4"))
Run Code Online (Sandbox Code Playgroud)

今天也刚刚遇到这个问题。不完全相同的错误,但离线运行的解决方案应该是相同的。我们将下载必要的文件,然后“欺骗”tiktoken 对其进行缓存。

如果您有一台无法访问互联网的远程计算机和一台可以访问互联网的本地计算机,则此方法有效。

我在下面概述了一个通用版本,但如果您有更新版本的 tiktoken 并且正在使用分词器,您可以跳到 tl;dr cl100k_base

通用步骤

第 1 步:获取 blob URL

首先,让我们从远程计算机上的源获取标记生成器 blob URL。如果我们跟踪该get_encoding函数,我们会发现它调用一个函数,其中tiktoken_ext.openai_public包含每个编码器的 blob URI。识别正确的函数,然后打印源代码

import tiktoken_ext.openai_public
import inspect

print(dir(tiktoken_ext.openai_public))
# The encoder we want is cl100k_base, we see this as a possible function

print(inspect.getsource(tiktoken_ext.openai_public.cl100k_base))
# The URL should be in the 'load_tiktoken_bpe function call'
Run Code Online (Sandbox Code Playgroud)

截至撰写本文时, cl100k_base应该为https://openaipublic.blob.core.windows.net/encodings/cl100k_base.tiktoken

第2步:下载

现在,导航到本地计算机上的 blob URL 来下载它。

注意:对于旧版本的 tiktoken,步骤 1 会为您生成一个 Azure blob URI(如az://openaipublic/encodings/cl100k_base.tiktoken);如果是这种情况,请前往此处的最新源并获取仅用于下载目的的非天蓝色链接。

步骤 3:复制并重命名文件

现在,将文件传输到远程计算机的新文件夹中。跟踪 get_encoding 函数进一步揭示了对tiktoken.load.read_file_cached()指示文件需要重命名的调用。要获取文件的名称,请运行以下代码(从源代码中提取):

import hashlib

blobpath = "your_blob_url_here"
cache_key = hashlib.sha1(blobpath.encode()).hexdigest()
print(cache_key)
Run Code Online (Sandbox Code Playgroud)

注意: blobpath是在步骤 1 中发现的 blob URL/URI;如果步骤 1 有一条az://路径,您仍在使用该路径。

将远程文件重命名为cache_key

第4步:设置tiktoken缓存

然后该read_file_cached函数检查环境变量中的缓存路径并从那里读取,所以让我们进行设置:

import os

tiktoken_cache_dir = "path_to_folder_containing_tiktoken_file"
os.environ["TIKTOKEN_CACHE_DIR"] = tiktoken_cache_dir

# validate
assert os.path.exists(os.path.join(tiktoken_cache_dir, cache_key))
Run Code Online (Sandbox Code Playgroud)

注意:这不是tiktoken文件的完整路径,只是包含该文件的文件夹的路径

每次需要 tiktoken 时都需要运行此代码片段。

第五步:使用抖音

恭喜,现在您可以使用tiktoken了

encoding = tiktoken.get_encoding("cl100k_base")
encoding.encode("Hello, world")
Run Code Online (Sandbox Code Playgroud)


CpI*_*ILL 7

我在 Docker 容器中使用它,因此当通过 CI/CD 构建映像时我会缓存该文件,如下所示:

FROM python:3.10-slim

WORKDIR /usr/src/app

COPY requirements.txt ./

RUN pip install --no-cache-dir -r requirements.txt

# Cache the tiktoken encoding file
RUN python -c "import tiktoken; tiktoken.encoding_for_model('gpt-3.5-turbo')"

...
Run Code Online (Sandbox Code Playgroud)

  • 这是一个很好的答案,但如果您添加“ENV TIKTOKEN_CACHE_DIR /opt/tiktoken_cache/”,那么您将能够看到该文件实际上已缓存在该目录中。我这样做是为了确认缓存正在按照我的预期进行。 (2认同)