环境:
ollama
问题描述:
ollama怎么一次停止所有在运行的模型?
解决方案:
1.编写一个脚本
脚本内容:
ollama () {
if [[ $1 == "pull" ]] && [[ $# -eq 1 ]]
then
echo "pulling all models..."
ollama list | awk '$1 !~ /^registry.local/ {print $1}' | while read -r model
do
if [[ $model != "NAME" ]]
then
echo "Pulling $model"
ollama pull "$model"
fi
done
elif [[ $1 == "stop" ]] && [[ $# -eq 1 ]]
then
echo "stopping all models..."
ollama list | awk '$1 !~ /^registry.local/ {print $1}' | while read -r model
do
if [[ $model != "NAME" ]]
then
echo "Stopping $model"
ollama stop "$model"
fi
done
else
command ollama "$@"
fi
}
这个脚本定义了一个名为 ollama
的 Bash 函数,用于增强 ollama
命令的功能。它扩展了 ollama
命令的行为,使其能够批量执行某些操作(如 pull
和 stop
),而不仅仅是对单个模型进行操作。
以下是脚本的详细解释:
1. 函数结构
ollama () {
...
}
- 定义了一个名为
ollama
的 Bash 函数。 - 当你在终端中运行
ollama
命令时,会调用这个函数而不是直接调用系统中的ollama
命令。
2. 检查第一个参数是否为 pull
if [[ $1 == "pull" ]] && [[ $# -eq 1 ]]
$1
是传递给函数的第一个参数。$#
是传递给函数的参数总数。- 这段代码的意思是:如果第一个参数是
pull
,并且只传入了一个参数(即没有其他额外参数)。
具体逻辑
echo "pulling all models..."
ollama list | awk '$1 !~ /^registry.local/ {print $1}' | while read -r model
do
if [[ $model != "NAME" ]]
then
echo "Pulling $model"
ollama pull "$model"
fi
done
ollama list
:列出所有可用的模型。awk '$1 !~ /^registry.local/ {print $1}'
:- 使用
awk
过滤输出,排除以registry.local
开头的行(可能是本地注册表的模型)。 - 只打印第一列(通常是模型名称)。
- 使用
while read -r model
:逐行读取过滤后的模型名称。if [[ $model != "NAME" ]]
:跳过标题行(通常是NAME
列头)。ollama pull "$model"
:对每个模型执行pull
操作(从远程仓库拉取模型)。
总结:当运行 ollama pull
时,脚本会自动拉取所有可用的模型(排除本地注册表中的模型)。
3. 检查第一个参数是否为 stop
elif [[ $1 == "stop" ]] && [[ $# -eq 1 ]]
- 如果第一个参数是
stop
,并且只传入了一个参数。
具体逻辑
echo "stopping all models..."
ollama list | awk '$1 !~ /^registry.local/ {print $1}' | while read -r model
do
if [[ $model != "NAME" ]]
then
echo "Stopping $model"
ollama stop "$model"
fi
done
- 与
pull
的逻辑类似,只是将pull
替换为stop
。 ollama stop "$model"
:对每个模型执行stop
操作(停止模型运行)。
总结:当运行 ollama stop
时,脚本会自动停止所有正在运行的模型(排除本地注册表中的模型)。
4. 默认行为
else
command ollama "$@"
fi
- 如果参数不符合上述条件(例如传入了其他命令或参数),则直接调用系统中的
ollama
命令。 command ollama "$@"
:command
强制调用系统中的原始ollama
命令,而不是递归调用这个函数。"$@"
将所有传递给函数的参数原样传递给系统命令。
5. 总结功能
这个脚本的主要功能是对 ollama
命令进行扩展,提供以下两个增强功能:
-
批量拉取模型:
- 运行
ollama pull
时,会自动拉取所有可用的模型(排除本地注册表中的模型)。
- 运行
-
批量停止模型:
- 运行
ollama stop
时,会自动停止所有正在运行的模型(排除本地注册表中的模型)。
- 运行
对于其他命令或参数,脚本会直接调用系统中的 ollama
命令。
6. 使用示例
批量拉取模型
ollama pull
- 输出示例:
pulling all models... Pulling model1 Pulling model2 Pulling model3
批量停止模型
ollama stop
- 输出示例:
stopping all models... Stopping model1 Stopping model2 Stopping model3
其他命令
ollama run model1
- 直接调用系统中的
ollama
命令,执行run model1
。
7. 注意事项
- 依赖性:脚本依赖于
ollama list
命令的输出格式。如果ollama list
的输出格式发生变化,脚本可能需要调整。 - 权限问题:确保你有足够的权限运行
ollama
命令及其子命令。 - 本地注册表过滤:脚本通过
awk
排除了以registry.local
开头的模型。如果你的环境中没有这样的模型,可以忽略这部分逻辑。