Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Question,大模型使用问题 #38

Open
duhang1996 opened this issue Dec 10, 2024 · 6 comments
Open

Question,大模型使用问题 #38

duhang1996 opened this issue Dec 10, 2024 · 6 comments

Comments

@duhang1996
Copy link

模型:llm4decompile-9b-v2
下图是我用demo.py跑出的结果:
image

是不是只能用这种执行demo.py脚本的方式使用大模型,目前有没有别的方式?

@duhang1996
Copy link
Author

duhang1996 commented Dec 11, 2024

sample_pseudo.txt
sample_result.txt

使用模型:llm4decompile-9b-v2模型
反编译libm-2.28.so二进制文件,sample_result是大模型输出的结果,函数内容不全,这是什么原因呢?

@albertan017
Copy link
Owner

模型使用可以用hf的model.generate,也可以用vllm推理(参考evaluation脚本),或者转换成gguf格式(hf也有朋友已经转换成该格式,我们暂时还没有尝试过)使用ollama/lmstudio推理。demo只是展示最直观简便的方式预处理-输入模型-输出结果。

内容不全应该是outputs = model.generate(**inputs, max_new_tokens=2048)设置。但训练样本大多是2K附近长度,4k长函数估计不及预期。我们在准备更长更强的模型。

@duhang1996
Copy link
Author

duhang1996 commented Dec 11, 2024

@albertan017 执行evaluation脚本出现:(https://github.com/albertan017/LLM4Decompile/blob/main/evaluation/run_evaluation_llm4decompile_vllm.py)脚本
image
脚本:python run_evaluation_llm4decompile_vllm.py --model_path ../../llm4decompile-9b-v2 --testset_path ../decompile-eval/decompile-eval-executable-gcc-ghidra.json --gpus 4 --max_total_tokens 8192 --max_new_tokens 512 --repeat 1 --num_workers 16 --gpu_memory_utilization 0.82 --temperature 0

是不是我的脚本参数有问题

@duhang1996
Copy link
Author

模型使用可以用hf的model.generate,也可以用vllm推理(参考evaluation脚本),或者转换成gguf格式(hf也有朋友已经转换成该格式,我们暂时还没有尝试过)使用ollama/lmstudio推理。demo只是展示最直观简便的方式预处理-输入模型-输出结果。

内容不全应该是outputs = model.generate(**inputs, max_new_tokens=2048)设置。但训练样本大多是2K附近长度,4k长函数估计不及预期。我们在准备更长更强的模型。

max_new_tokens换成4096也是显示不全。

@albertan017
Copy link
Owner

模型使用可以用hf的model.generate,也可以用vllm推理(参考evaluation脚本),或者转换成gguf格式(hf也有朋友已经转换成该格式,我们暂时还没有尝试过)使用ollama/lmstudio推理。demo只是展示最直观简便的方式预处理-输入模型-输出结果。
内容不全应该是outputs = model.generate(**inputs, max_new_tokens=2048)设置。但训练样本大多是2K附近长度,4k长函数估计不及预期。我们在准备更长更强的模型。

max_new_tokens换成4096也是显示不全。

不太能复现你的情况,我尝试了增加max_length,但结果一致。

使用模型:llm4decompile-9b-v2模型
代码:

from transformers import AutoTokenizer, AutoModelForCausalLM
import torch

fileName = "sample"

model_path = 'LLM4Binary/llm4decompile-6.7b-v2' # V2 Model

tokenizer = AutoTokenizer.from_pretrained(model_path)
model = AutoModelForCausalLM.from_pretrained(model_path, torch_dtype=torch.bfloat16).cuda()

with open(fileName +'.pseudo','r') as f:#optimization level O0
    asm_func = f.read()
inputs = tokenizer(asm_func, return_tensors="pt").to(model.device)
with torch.no_grad():
    outputs = model.generate(**inputs, max_new_tokens=4048)### max length to 4096, max new tokens should be below the range
c_func_decompile = tokenizer.decode(outputs[0][len(inputs[0]):-1])

print(f'refined function:\n{c_func_decompile}')

以下是model.generate的结果:

refined function:
long double
expl(long double x)
{
 long double y, z, w, t1, t2, u, v, r, s, c, d, e, f, g, h, i, j, k, l, m;
 int ix, hx, lx, ix1, iy;


 if (x == 0.0)
  return (1.0);
 if (x != x)
  return (x + x);


 ix = *(1 + (int *)&x);







 ix &= 0x7fffffff;






 if (ix >= 0x7ff00000) {
  if (((ix & 0xfffff) | ((ix >> 12) & 0x7ff00000)) == 0x7ff00000)
   return (x * 0.0 + 1.0);
  return (x * 0.0);
 }


 if (ix < 0x3e300000) {
  if (ix < 0x33800000) {
   if (ABS(x) < 1.00000000000000011102230246251565404236316680908203125e-292)
    return (1.0);
   z = x * x;
   w = z * x;
   iy = 1 - (ix >> 20);
   return (1.0 + w * (1.0 + iy * (0.5 + w * (0.33333333333333331111111111111111 +
       w * 0.25 * (1.0 + iy * (0.2 + w * 0.16666666666666666666666666666667))))));
  }
  iy = (ix >> 20) - 1023;
  ix &= 0x000fffff;
  ix |= (1 << 20);
  x = *(1 + (int *)&ix) - 1.0;
  if (ix >= 0x7fe00000)
   return (x * 0.0 + 1.0);
  if (iy >= 20) {
   w = 1.0 - x;
   return (w * 0.0);
  }
 } else {
  iy = (ix >> 20) - 1023;
  ix &= 0x000fffff;
 }


 if (ix >= 0x7e900000) {
  if (ix >= 0x7fd00000)
   return (x * 0.0 + 1.0);
  if (iy >= 709) {
   w = 1.0 - x;
   return (w * 0.0);
  }
 }


 hx = ix >> 4;
 lx = (ix & 0xf) << 20;
 if (hx >= 0x3ff) {
  u = 0.0;
 } else {
  if (hx < 0x3fe) {
   ix1 = (hx & 0x800) >> 11;
   hx &= 0x7fe;
   u = ldexpl((long double)hx, -20);
   t1 = u * (long double)0x1.8p52;
   t2 = u * -(long double)0.48074069840786023350695868215571167910752964391708255675837672578125e-29;
   c = t1 + t2;
   d = (long double)0.5 * c;
   e = (long double)0.5 - d;
   f = (long double)1.0 + e;
   g = f - d;
   h = f - (c + g);
   ix1 |= (ix >> 12) & 0x7ff;
   iy += ix1;
  } else {
   ix1 = (hx & 0x400) >> 10;
   hx &= 0x3ff;
   u = ldexpl((long double)hx, -20);
   t1 = u * (long double)0x1.8p52;
   t2 = u * -(long double)0.48074069840786023350695868215571167910752964391708255675837672578125e-29;
   c = t1 + t2;
   d = (long double)0.5 * c;
   e = (long double)0.5 - d;
   f = (long double)1.0 + e;
   g = f - d;
   h = f - (c + g);
   ix1 |= (ix >> 12) & 0x7ff;
   iy += ((ix1 & 0x7ff) | ((ix1 >> 11) & 0x7800));
  }
  k = ldexpl((long double)iy, -52);
  if (lx == 0) {
   j = k;
  } else {
   volatile long double dk = k, *ip = (&j);

   *ip = dk * ldexpl((long double)lx, -52);
   hx = *(1 + (int *)&j);
   hx &= 0x7fffffff;
   if (hx < 0x3fff0000) {
    if ((hx & 0xfffff) | ((hx >> 10) & 0x7ff00000))
     return (k * x);
   }
   j = k;
  }
  if (iy > 0) {
   v = j + k;
   w = v - k;
   y = v - (j + w);
   return (y + x * k);
  }
  v = j - k;
  w = v - k;
  y = v - (j + w);
  return (x * y + k * j);
 }


 if (iy > 0) {
  z = ldexpl((long double)1, iy);
  return (x * z);
 }


 z = ldexpl((long double)1, -iy);
 return (z * expl(x));
}

@albertan017
Copy link
Owner

@albertan017 执行evaluation脚本出现:(https://github.com/albertan017/LLM4Decompile/blob/main/evaluation/run_evaluation_llm4decompile_vllm.py)脚本%E8%84%9A%E6%9C%AC) image 脚本:python run_evaluation_llm4decompile_vllm.py --model_path ../../llm4decompile-9b-v2 --testset_path ../decompile-eval/decompile-eval-executable-gcc-ghidra.json --gpus 4 --max_total_tokens 8192 --max_new_tokens 512 --repeat 1 --num_workers 16 --gpu_memory_utilization 0.82 --temperature 0

是不是我的脚本参数有问题

这里有什么问题吗?截图中基本复现论文中llm4decompile-9b-v2的结果。
各类的error是编译和执行测试的error(对应的是不能执行的那一部分数据报错,我们没有屏蔽编译和执行中的报错)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants