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头的逐个分数,然后用字节比较显示是Saluki是ISTA位数的remix还是被改变的模型。 然后我们用一个GPU提供每个文件,读取其内存和速度,并在伯克利函数调用“领导板”的120个原始任务上得分,使用BFCL自己的检查器进行严格和宽松的解析。

导入 Os

导入再

导入点

导入 sys

导入 json

导入数学

导入副本

导入语句

导入 glub

导入时间

导入类型

导入随机

导入快取

导入结构

导入散列

导入 tar 文件

导入平台

导入回溯

导入子进程

导入收藏

导入urlib。请求

导入urlib.error

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

声称 = # (步骤、 主张、 持有)行;持有的是 True、 False 或 None (本行没有决定)

现值= ["1"]

def 横幅( 标题):

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

打印(标题)

打印 ("=" * 78)

def 区域( 名称):

包装( fn):

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

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

横幅( 名称)

t0 = 时间。 time ()

尝试:

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

ResULTS[名] = 如果出现(出,字符串) 其他"ok"

返回出来

例外作为e:

ResULTS[名]=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).

返回运行

返回包装

df 索赔(案文,持有):

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

持有的返回

横幅 ("1. 平台、 指针和帮助")

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

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

profile 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"));

d in(“模型”、“llama”、“bfcl”、“跑道”):

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]

国防部={

"萨卢克":dict(repo="康威研究/下道克-萨卢克-27B-1.0",rev="4f60eba09f4b6db63c72915d328d97e1d93edb8c"

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

sha256="4a673518b11b1c4445f9b9a9d3c40356f5ba39f6a6260dcb25f3fbd475d9efb"),原名"sha".

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

s.gguf),大小为8422841472) 互联网档案馆的存檔,存档日期2013-12-02.

sha256="f0ae5006da0ce6225935339e4e989369f94de95d2263cf969519f8420c9ae02c"),是中国国家重点文物保护单位。

}

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

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

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

BFCL FILES = { (英语).

" Data/BFCL v4 simple python.json":"82d63ba502eb2520c6b5d1d9a5c4b590e03ff261565175561f6228a367d1991" (中文(简体) ).

"data/BFCL_v4_multiple.json": "aef168155ebd74b7ac2401198b201343bc7d16d7a3d7e0d4e6d8ee82c6969b2a",

"data/BFCL_v4_irrelevance.json": "2b6ed4c2e992cdcf5f1678a701851f944bef7550ee026ed1ddb89efed5be01a6",

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

"数据/BFCL v4 并行-多相.json":"8863ea84333239f55c5f016154cf0830853c89f693c6ea270396a2f121960579".

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

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

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

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

" eval checker/ast eval/ast checker.py":"2aae7a68461a8f76c0 Be3894c8901b66b56967a1989d3ab066051ef3b97f1538" (中文(简体) ).

"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,下-p=0)

df sH(cmd, **kw): (中文(简体) ).

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

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

h = 大麻脂.sha256()

以 open( path, “rb ”) 为 f:

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

h. 更新(b)

返回 h. hexdigest () ()

取出(url, dest,大小=无;sha=无;静=法:

""可续下载有卷曲,再用尺寸和SHA-256检查。 返回所花费的下载秒数。”

t0 = 时间。 time ()

如果不是(os.path. sexts(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(最大)

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

若为sha:

profile sha256 file (dest) == sha, f"{os.path.basename (dest)}: SHA-256不匹配" (中文(简体) ).

返回时间。 time () - t0

print(f)"平面:{SYSTEM}{MACHINE}, Python {平面:python version ()}, glibc {平面: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建造了没有CUDA运行时间的llama.cpp飞船;Colab的形象有"活页轮".

导入导入lib.util

如果导入lib.util.find spec ("nvidia.cuda runtime") 则无为或导入lib.util.find spec ("nvidia.cublas") 为无为:

sub process.run ([sys. executive,"-m","pip","install","-q","nvidia-cuda-runtime-cu12 == 12.9.79") 互联网档案馆的存檔,存档日期2011-12-09.

"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)] (中文(简体) ).

其他情况:

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

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

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

CUDA_LIBS = []

HW = gpu.split(",")[0] if SYSTEM == "Linux" else chip

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/发布/下載/{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) 互联网档案馆的存檔,存档日期2014-12-21.

如果 CUDA LIBS: (笑声)

活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活

缺少 = [l for l in s (['ldd, sERVER BIN], senv=SERVER ENV].stdout.splitlines () 如果在l中"找不到"的话]

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

r = s ([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 (path) and os.path.getsize (path) = ["大小"]

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

dl = 获取(url,路径,m ["大小"]) # 大小检查,下方为散列

t0 = 时间。 time ()

OK=sha256 file (path) == ["sha256"] (中文(简体) ).

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

打印( f) { tag: 7s}: { m [' file']} { m [' six']:,} 字节,{how}; SHA-256 { “ matches” if ok else “DOES Not MATCH” ”

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

claim(f) “{m['file']}与被钉在 {m['repo'}} ['rev'][:7] 上的文件字节相同,ok)

坚持好

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

下载 step ()

我们下载了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 = open(路径,“rb ”)

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

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

scalar = {0:"B", 1:"b", 2:"H", 3:"h", 4:"我", 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] )

(原始内容存档于2018-10-21) (英语). leady f.read (4) == b "GGUF"

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

kv = {}

为

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

相关 AI 工具

相关免费羊毛

同源资讯

阅读原文(marktechpost.com)

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

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

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