AI图鉴

AI图鉴首页 › AI 资讯 › 如何运行下犬萨卢基 27B:2-Bit Qwen3.8-27B 工具呼叫指南

如何运行下犬萨卢基 27B:2-Bit Qwen3.8-27B 工具呼叫指南

来源:MarkTechPost · 发布时间:10-25 · 由 AI图鉴每小时自动聚合

探索一个完整的编码指南,将下犬Saluki 27B与ISTA的GSQ-RCO量化比较,检查GGUF头,内存使用,以及BFCL工具调用perf

在这个教程中,我们与Underdog Saluki 27B合作,这是Qwen3.8-27B的7.9GB构件,它的制造者们说它保持工具调用完好无损,每重量约2位,甚至从自己的120任务基准测试上的全54GB模型中脱落。 Saluki基于ISTA-DASLab的GSQ-RCO对同一型号的量化,所以我们把两个文件并存于股票llama.cpp. 我们先从文件本身开始:两个GGUF头的变速器 by-tensor diff,然后是字节级比较,显示是Saluki是ISTA的位数的remix还是一个改变的模型。 然后我们用一个GPU提供每个文件,读取其内存和速度,并在伯克利函数调用Laderboard的120项原始任务上得分,使用BFCL自己的检查器进行严格和宽松的解析。

导入 Os

导入重置

导入点

导入 sys

导入 Json

导入数学

导入副本

导入语句

导入 glob

导入时间

导入类型

导入随机

导入 hipil

导入结构

导入大麻脂

导入 tar 文件

导入平台

导入追溯

导入子进程

导入收藏

导入urlib。请求

导入urlib.error

成果 = 步 - > 单行结果,用于总表

声称 = [#] (步骤、索赔、持有);持有的是真、假或无(本轮未决定)

现值 = ["1]

def 横幅( 标题):

打印("\n" + "=" * 78)

打印(标题)

打印 ("=" * 78)

def section(name):

fn) 包装:

f 运行( *a, ** kw):

现 [0] = name.split (") [0].

横幅( 名称)

t0 = 时间。 time ()

尝试:

输出 = fn(*a,**kw)

RESULTS[名] = 如果出现( 出,str) 其他"OK"。

返回出来

例外作为e:

RESULTS[name] = f"SKIPPED / FAILED -> {type(e).__name__}: {e}"

打印 (f)\n [!] {name} 未完成:{type (e). name: {e}>

回溯.print exc(限制=3)

返回无

终于:

打印(f)\n [{time.time() - t0: 1f} s] )

json.dump({"结果"):RESULTS,"声称":声称},开放(os.path.join(WORK,"结果.json"),"w",缩进=1).

返回运行

返回包装

索赔(案文,持有):

声称。 附录((CURRENT[0],文本,持有))

持有的返回

横幅 ("1. 平台、 针头和助手")

System, MACHINE = 平台。 system (),平台。 机器 ()

ON CUDA = TEM = "Linux"和 shutil.which ("nvidia-smi") 不是无

维护 ON CUDA 或 (SYSTEM = "Darwin" 和 MACHINE = "arm64"), "需要 NVIDIA GPU 在 Linux(Colab T4)或 Apple-硅Mac上"

Work = os.environ.get ("SALUKI WORK") 或 ("/content/saluki",如果 os.path.isdir ("/content") 或 os.path.abspath ("saluki work") ).

(“模型”、“llama”、“bfcl”、“runs”):

os.makedirs(os.path.join (WORK, d),存在 ok=True) (英语).

{\fn方正粗倩简体\fs12\an8\1cHFFFF00\b0}笔记本下载的每件东西都由尺寸和SHA -256.

LLAMA TAG = "b11565"#llama.cpp 2026-10-12发布,承诺f9a95aeb2

LLAMA_ASSET = {"Linux": ("llama-b11565-bin-ubuntu-cuda-12.8-x64.tar.gz", 171559844,

"61b8cf4e49739afe4008b06a92390dff999e706e9e7e9749c015544a9f241627"),中国大陆古代名人。

"达尔文":("llama-b11565-bin-macos-arm64.tar.gz",12105509).

"19289548468babcd5131cecccf3a9bc7c67030cc7f0a978dafc0db1ba7891068")}[SYSTEM]

MODELS = { (简体中文)

"萨卢基":dict(repo="康威研究/下犬-萨卢基-27B-1.0"),rev="4f60eba09f4b6db63c72915d328d97e1d93edb8c".

file="Underdog-Saluki-27B-1.0-IQ2-mix.gguf",体积=7898369152

sha256="4a673518b11b1c4445f9b9a9d3c40356f5ba39f6a6260dcb25f3fbd475d9efb"),是中国大陆的特产。

"ISTA":dict(repo=)"ISTA-DASLab/Qwen3.8-27B-GSQ-RCO-GGUF",rev="d562806dbafae37109975e970aae91b43e73b440" (中文(简体) ).

file="Qwen3.8-27B-GSQ-RCO-IQ2 XS.gguf",尺寸=8422841472.

sha256="f0ae5006da0ce6225935339e4e989369f94de95d2263cf969519f8420c9ae02c"),中国植物物种信息数据库。

}

# BFCL v4 的数据和 BFCL 自己的检查码,在一个大猩猩承诺。

GORILLA = ("https://raw.githubusercontent.com/ShishirPatil/gorilla/6ea57973c7a6097fd7c5915698c54c17c5b1b6c8/"

(bfcl eval/)) (中文(简体) ).

BFCL_FILES = {

"数据/BFCL v4 simple python.json":"82d63ba502eb2520c6b5d1d9a5c4b590e03ff261565175561f6228a367d1991".

"数据/BFCL v4 multiple.json":"aef168155ebd74b7ac2401198b201343bc7d16d7a3d7e0d4e6d8ee82c6969b2a".

"数据/BFCL v4 irrelance.json":"2b6ed4c2e992ccf5f1678a701851f944bef750ee026ed1db89efed5be01a6".

"data/BFCL_v4_parallel.json": "19f51a82eff42e5d62541aa500115a056eb78f437c2ba1f10415fd7c8e5dda84",

"数据/BFCL v4 exityl multiple.json":"8863ea84333239f55c5f016154cf0830853c89f693c6ea270396a2f121960579".

"数据/可能回答/BFCL v4 simple python.json":"90cd5bc653690ee8e459b5b3f3fc9458606f7f3fcbb5b51b7dc581f8c86dc".

"数据/可能答案/BFCL v4 multiple.json":"244e00ce9395df948bcafc7bee64e8f9c87ef70887587d83cae45b13699f3047".

"数据/可能回答/BFCL v4 并行.json":"8a6aa19c1addc6a5a2f7e40f9dbf30cc7e95815e7b830c90589ab318229e0f0".

"数据/可能回答/BFCL v4 并行复数.json":"5ebf24f458c1f16300c05505d83d6f0a1b68b79be273a033febd0d4f840507e3".

"eval checker/ast eval/ast checker.py":"2aae7a68461a8f76c0贝3894c8901b66b56967a1989d3ab066051ef3b97f1538" 互联网档案馆的存檔,存档日期2014-03-07.

"constants/enums.py": "2182becfa2a1d071ee1db30db593b4758c6bf866aa12d2d4b8daf09175ea518a",

"constants/type_mappings.py": "1702fb67afbe2c492608e58e2b7d02e46381f50166b47f3c952f76e34c7cd3bd",

"utils.py": "3703b9bb63f83581c60b8e0b82aac74c360c9ca781e99e7d4eb28b0cce2285dd",

"model_handler/utils.py": "f78fd3edce603b333dc9a88ee2c041dc547d51f71aa449ffebc044c4b1e353f3",

}

# 下犬座的五种任务,每个24个;我们自己绘制种子样本,因为任务列表没有公布。

KINDS = [("simple python","调用一个正确的函数"), ("复数", "从几个中选择正确的函数")

("无关","在没有工具适合时知道",("并行","相同的功能,几个呼叫")).

("并行多功能","几种不同的功能").

N_PER_KIND, SEED, CTX, PORT = 24, 2026, 16384, 8080

# llama-server自身默认温度为0.8和最高 k 40,因此每个请求都声明其采样器。

GREEDY = dict(温度=0,上 k=0,上 p=1.0,min p=0)

def sh(cmd, **kw):

返回子进程。 run( cmd,抓取输出= True,文本= True, ** kw)

def sha256 file(路径,块=1 + 22):

h = 大麻脂.sha256()

以开放( path, "rb") 作为 f:

b in iter( lambda: f.read( chunk), b") 中:

h. 更新(b)

返回 h. hexdigest( )

def figure(url, dest,大小=无,sha=无,安静=假):

"""可续下载带卷曲,然后大小和SHA-256检查。 返回已花费的下载秒数。”

t0 = 时间。 time ()

如果不是 (os.path. highs(dest) 和 (大小为 None 或 os.path.getsize(dest) ==)):

试验范围(5):

r = sh(["curl", "-fsSL", "-C", "-", "--retry", "5", "-o", dest, url])

如果 r. returncode = 0 和 (大小为 None 或 os.path.getsize(dest) = 大小):

换行

时间。 sleep( 5 * (尝试+1) )

os.path.getsize (dest) (中文(简体) ).

profile 大小为 None 或者有 == 大小,f" {os.path.basename(dest)}: {got} 字节,期望 {大小}"

若为sha:

profile sha256 field(dest) == sha, f"{os.path.basename(dest)}: SHA-256不匹配".

返回时间。时间() - t0

打印(f)平台:{SYSTEM}{MACHINE}, Python {platform.python version ()}, glibc {platform.libc ver () [1] 或 'n/a'})

如果系统="Linux":

print("os :", open("/etc/os-release").read().split('PRETTY_NAME="')[1].split('"')[0])

gpu = sh(["nvidia-smi", "--query-gpu=name,memory.total,driver_version", "--format=csv,noheader"]).stdout.strip()

打印 ("gpu:", gpu)

#CUDA 12.8建造的llama.cpp船没有CUDA运行时间;Colab的形象有作为pip轮。

导入导入lib.util

如果导入lib.util.find spec ("nvidia.cuda runtime") 是 None 或导入lib.util.find spec ("nvidia.cublas") 是 None:

subprocess.run([sys.executable, "-m", "pip", "install", "-q", "nvidia-cuda-runtime-cu12==12.9.79",

"nvidia-cublas-cu12 ==12.9.2.10"],检查=True).

导入 nvidia.cuda 运行时间,nvidia.cublas

CUDA LIBS = [os.path.join(list(m. path )][0),"lib"表示 m in(nvidia.cuda runtime,nvidia.cublas)].

其他情况:

芯片=sh(["sysctl","-n","machdep.cpu.brand string"]). stdout.strip().

mem = int(sh(["sysctl", "-n", "hw.memsize"]).stdout) / 2**30

打印( f) gpu: {chip}, { mem: 0f} GB 统一内存(Metal)".

CUDA_LIBS = []

HW = gpu.split (",") [0] 如果 TET = "Linux" 其他芯片

print(f"work dir : {WORK} ({shutil.disk_usage(WORK).free / 1e9:.0f} GB free)")

笔记本触摸的每样东西都会被钉在安全的地方设置的单元格记录了llama.cpp的发布,既按大小记录了模型文件,又按14个BFCL文件,SHA-256,它为每个请求修正了采样器,因为llama-服务器否则会回到我们没有选择的默认状态。 它在Linux或Apple-硅Mac上探测平台,NVIDIA GPU,在Colab上它确保了CUDA12运行时库预建的llama. cpp需求可以导入。 cpp需求可以导入。

@section ("2. 下载 llama.cpp b11565 和两个2位文件,并检查每个字节与它的标点).

def 下载 step ():

全球 LLAMA DIR, SERVER BIN, SERVER ENV

名称、 大小、 sha = LLAMA ASSET

tar = os.path.join(WORK,"llama",名称)

获取(f)"https://github.com/ggml-org/llama.cpp/发布/download/{LLAMA TAG}/{name}",焦油,大小,sha).

以 tarfile.open(tar) 作为 t:

t.extractall(os.path.join(WORK,"llama"),过滤="数据")

SERVER BIN = glob.glob(os.path.join(WORK,"llama","**","llama-服务器"),递归=True) [0]

LLAMA DIR = os.path.dirname(SERVER BIN) 互联网档案馆的存檔,存档日期2013-12-21.

b 在glob.glob(os.path.join(LLAMA DIR,“llama-*”)中):

os.chmod(b, 0o755) (中文(简体) ).

SERVER ENV = dict(os.environ) 维基百科中的相关条目:维基语录链接:名人名言 - 文学作品 - 谚语 - 谚语 - 谚语 - 谚语 - 谚语 - 谚语

如果 CUDA LIBS: (笑声)

SERVER_ENV["LD_LIBRARY_PATH"] = ":".join(CUDA_LIBS + [LLAMA_DIR, SERVER_ENV.get("LD_LIBRARY_PATH", "")])

缺少 = [l for l in sh (['ldd, sERVER BIN], env=SERVER ENV].stdout.splitlines () if "not found" in l]

声明不缺失,f"未解决的库:{ missing}"

r=sh([SERVER BIN,"-版本"),env=SERVER ENV).

ver = re.search(r"version: .*", r.stdout + r.stderr).group(0)

打印(f)"llama.cpp:{name}(SHA-256已选中) - > {ver}")

在BFCL FILES.items(:

dest = os.path.join(WORK, "bfcl", rel.replace("/", "__"))

获取(GORILLA + rel, dest, sha=digest)

print(f)"BFCL v4: {len(BFCL FILES)}来自大猩猩@6ea5797的文件(5个任务文件,4个答案文件,5个检查器来源),全部SHA-256选中) ).

用于标记,m in MODELS. items( ):

path = os.path.join(WORK, "模型", m["文件"])

= os.path.存在(path)和 os.path.getsize(path) = ["大小"]

url = f"https://huggingface.co/{m['repo']}/resolve/{m['rev']}/{m['file']}"

dl = 获取(url, path, m['size]) # 大小检查,下方为散列

t0 = 时间。 time ()

OK=sha256 file(路径)=["sha256"]

如果在 {dl: 0f} s( { m ['size'] / dl / 1e6: 0f} MB/s) 中有其他 f 下载,则如何 = “ 已经在磁盘上”?

打印( f) { tag: 7s}: { m ['file]} { m [' six']:,} 字节,{how}; SHA-256 { 如果还有“ DOES Not MATCH ”, “ 匹配 ”

f"the Hub's LFS pin ({time.time() - t0:.0f} s to hash)")

c. 与文件的字节相同,以 { m ['repo' } { m ['rev' [:7]], ok)

坚持好

返回 f"llama.cpp {LLAMA TAG}; Saluki 7.90 GB 和 ISTA IQ2 XS 8.42 GB 由 SHA-256 验证"

下载步骤( )

我们下载了llama.cpp b11565的CUDA架构,既包含2位文件,也包含BFCL数据,并对照它的标点检查每个字节。 Hugging Face的下载是可重复的,散列器是在固定的修订版中Hub自己的LFS文摘,所以默默替换的文件会停止笔记本而不是改变其结果。 BFCL 的任务文件,答覆文件,以及检查器代码都来自一个大猩猩的承诺。 手机打印下载时间有多长,这是Colab运行最慢的部分。

GGML_TYPES = {0: ("F32", 1, 4), 1: ("F16", 1, 2), 8: ("Q8_0", 32, 34), 10: ("Q2_K", 256, 84), 12: ("Q4_K", 256, 144),

16: ("IQ2_XXS", 256, 66), 17: ("IQ2_XS", 256, 74), 18: ("IQ3_XXS", 256, 98), 19: ("IQ1_S", 256, 50),

21: ("IQ3_S", 256, 110), 22: ("IQ2_S", 256, 82), 23: ("IQ4_XS", 256, 136), 29: ("IQ1_M", 256, 56),

30:(“BF16”,1,2”)}# 名称,每个区块的值,每个区块的字节(ggml-common.h)

def 读作 gguf(路径):

"""GGUF v3 标题:元数据,变位表(名称,暗号,类型,偏移)以及变位数据起始位置".

f=开(路径,“rb”)

u = lambda fmt: struct.unpack (" <" + fmt, f.read(struct.calcsize(fmt))) [0] (中文(简体) ).

s = 羊肉:f.read(u ("Q")))) 代码("utf-8","替换").

scalar = {0: "B", 1: "b", 2: "H", 3: "h", 4: "I", 5: "i", 6: "f", 7: "?", 10: "Q", 11: "q", 12: "d"}

def val(t): (中文(简体) ).

如果第8节:

返回 s( )

如果第9节:

et, n = u("I"), u("Q")

返回 [val(et) for in(n)]

返回 u( scalar[t] )

(原始内容存档于2017-03-26). Expressed f.read (4) == b"GGUF"

版本,n tensors,n kv=u("I"),u("Q"),u("Q")

kv = {}

为

本文由 AI图鉴自动抓取并翻译,版权归原作者所有;如需查看原文请点下方链接。

相关 AI 工具

相关免费羊毛

同源资讯

阅读原文(marktechpost.com)

标题、摘要与正文均来自该信源的公开页面,版权归原作者所有;本站自动聚合与翻译,仅作出处跳转。

← 返回 AI 资讯列表AI工具图鉴首页

返回 AI图鉴首页 · 提交工具 · 商务合作 · 关于本站 · 591 款 AI 工具分类导航 · 每日 AI 热门项目与动态