提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
上一篇手动复制太慢,写了一个脚本用来快速复制ollama模型
代码
代码如下(示例):
import os
import json
import shutil
import random
import string
import hashlib
def generate_random_string(length=10):
"""生成一个指定长度的随机字符串"""
letters = string.ascii_letters + string.digits # 包括字母和数字
return ''.join(random.choice(letters) for i in range(length))
def calculate_sha256(input_string):
"""计算给定字符串的SHA-256哈希值"""
sha256_hash = hashlib.sha256(input_string.encode()).hexdigest()
return sha256_hash
def copy_file(copyed_file_path, copy_file_path):
"""
copyed_file_path: 被拷贝文件路径
copy_file_path: 拷贝文件路径
"""
if not os.path.exists(copyed_file_path):
print(f"被拷贝文件路径:{copyed_file_path} 不存在")
else:
# 创建目录(如果不存在)
os.makedirs(os.path.dirname(copy_file_path), exist_ok=True)
shutil.copy2(copyed_file_path, copy_file_path)
print(f"文件:{copyed_file_path} 拷贝到文件:{copy_file_path} 成功")
# 模型存储的位置路径
model_save = "/usr/share/ollama/.ollama/models" # TODO 根据自己的系统替换
# 被选择的模型名
selected_model_name = "llama3.1:latest" # TODO
# 复制后的模型名
copy_model_name = "l2:latest" # TODO
# 被选择的模型信息文件路径
selected_model_info_file_path = os.path.join(model_save, "manifests/registry.ollama.ai/library", "/".join(selected_model_name.split(":")))
# 获得被选择模型的信息,里面有保存模型的数据文件名
selected_model_info = json.load(open(selected_model_info_file_path))
# 1.复制模型文件
selected_model_info_config = selected_model_info["config"]
selected_model_info_layers = selected_model_info["layers"]
raw_digest = selected_model_info_config["digest"] # 原始名获取
generate_digest = calculate_sha256(generate_random_string(10)) # 拷贝的文件名生成
copy_file(os.path.join(model_save, "blobs", raw_digest.replace(":", "-")), os.path.join(model_save, "blobs", f"sha256-{generate_digest}")) # 开始拷贝
selected_model_info["config"]["digest"] = f"sha256:{generate_digest}" # 替换生成的文件名
for index, selected_model_info_layer in enumerate(selected_model_info_layers):
raw_digest = selected_model_info_layer["digest"] # 原始名获取
generate_digest = calculate_sha256(generate_random_string(10)) # 拷贝的文件名生成
copy_file(os.path.join(model_save, "blobs", raw_digest.replace(":", "-")), os.path.join(model_save, "blobs", f"sha256-{generate_digest}")) # 开始拷贝
selected_model_info["layers"][index]["digest"] = f"sha256:{generate_digest}" # 替换生成的文件名
# 2.将复制的模型信息写入信息文件
# 创建目录(如果不存在)
os.makedirs(os.path.join(model_save, "manifests/registry.ollama.ai/library", copy_model_name.split(":")[0]), exist_ok=True)
# 写入文件
json.dump(selected_model_info, open(os.path.join(model_save, "manifests/registry.ollama.ai/library", "/".join(copy_model_name.split(":"))), "w"), ensure_ascii=False)
TODO就是需要修改的参数
注意
还是那个问题,如果ollama list没找到,那就看看权限是否正确