已开启
upload Goedel-Prover #15
xiaolingling_8909创建于 7月23日
upload Goedel-Prover #15
已开启
共 3 个文件变更+240-0
| @@ -0,0 +1,155 @@ | |||
| 1 | +--- | ||
| 2 | +license: mit | ||
| 3 | +--- | ||
| 4 | + | ||
| 5 | +# 概述 | ||
| 6 | + | ||
| 7 | +Goedel-Prover 是一个开源的大语言模型(LLM),在数学问题自动形式化证明生成领域达到了领先水平(SOTA)。该领域的关键挑战在于形式化数学语句和证明数据的稀缺性,Goedel-Prover 通过以下方式解决了这一问题: | ||
| 8 | + | ||
| 9 | +首先,训练语句形式化器(statement formalizers),将 Numina 数据集中的自然语言数学问题翻译为形式化语言(Lean 4),创建了一个包含 164 万条形式化语句的数据集。在此过程中,使用 LLM 来检查形式化语句是否准确保留了原始自然语言问题的内容。 | ||
| 10 | + | ||
| 11 | +然后,通过训练一系列证明器(provers),迭代地构建了一个大规模形式化证明数据集。每个证明器都能成功证明前一个证明器无法解决的许多问题,这些新证明被添加到下一个证明器的训练集中。 | ||
| 12 | + | ||
| 13 | +最终证明器在全证明生成(whole-proof generation)方面超越了所有现有的开源模型。在 miniF2F 基准测试上,达到了 **57.6%** 的成功率(Pass@32),比此前最佳开源模型高出 7.6%。在 PutnamBench 上,Goedel-Prover 成功解决了 **7 个问题**(Pass@512),在排行榜上排名第一。此外,为 Lean Workbook 问题生成了 29.7K 条形式化证明,几乎是此前工作(15.7K)的两倍。 | ||
| 14 | + | ||
| 15 | +- 参考实现: | ||
| 16 | + | ||
| 17 | + ```shell | ||
| 18 | + url=https://github.com/Goedel-LM/Goedel-Prover.git | ||
| 19 | + ``` | ||
| 20 | + | ||
| 21 | +- 适配昇腾 AI 处理器的实现: | ||
| 22 | + | ||
| 23 | + ```shell | ||
| 24 | + url=https://gitcode.com/AI4Science/LifeScience.git | ||
| 25 | + code_path=PyTorch/Goedel-Prover | ||
| 26 | + ``` | ||
| 27 | + | ||
| 28 | +#### 组件版本 | ||
| 29 | + | ||
| 30 | +```shell | ||
| 31 | +hdk:25.3.rc1.2 | ||
| 32 | +cann:8.3.RC1 | ||
| 33 | +python:3.10 | ||
| 34 | +torch:2.5.1 | ||
| 35 | +torch-npu:2.5.1 | ||
| 36 | +``` | ||
| 37 | + | ||
| 38 | +#### 拉取仓库 | ||
| 39 | + | ||
| 40 | +```shell | ||
| 41 | +git clone https://gitcode.com/AI4Science/LifeScience.git | ||
| 42 | +cd LifeScience/PyTorch/Goedel-Prover | ||
| 43 | +git clone --recurse-submodules https://github.com/Goedel-LM/Goedel-Prover.git | ||
| 44 | +cd Goedel-Prover | ||
| 45 | +``` | ||
| 46 | + | ||
| 47 | +#### 环境准备 | ||
| 48 | + | ||
| 49 | +1. 新建conda环境 | ||
| 50 | +```shell | ||
| 51 | +conda create -n goedel-prover python=3.10 -y | ||
| 52 | +conda activate goedel-prover | ||
| 53 | +``` | ||
| 54 | + | ||
| 55 | +2. 安装依赖 | ||
| 56 | +```shell | ||
| 57 | +export PIP_INDEX_URL=https://repo.huaweicloud.com/repository/pypi/simple/ | ||
| 58 | +pip install -r requirements.txt | ||
| 59 | +``` | ||
| 60 | + | ||
| 61 | +3. 验证 PyTorch 与 torch_npu 安装 | ||
| 62 | +执行以下命令检查安装是否成功: | ||
| 63 | +```shell | ||
| 64 | +python3 -c "import torch;import torch_npu; a = torch.randn(3, 4).npu(); print(a + a);" | ||
| 65 | +``` | ||
| 66 | +若输出类似以下信息,说明安装成功: | ||
| 67 | +``` | ||
| 68 | +tensor([[-0.6066, 6.3385, 0.0379, 3.3356], | ||
| 69 | + [ 2.9243, 3.3134, -1.5465, 0.1916], | ||
| 70 | + [-2.1807, 0.2008, -1.1431, 2.1523]], device='npu:0') | ||
| 71 | +``` | ||
| 72 | +若报错,排查顺序: | ||
| 73 | + - set_env.sh 是否已 source | ||
| 74 | + - decorator 等运行时依赖是否安装 | ||
| 75 | + - CANN 与 torch_npu 版本是否匹配 | ||
| 76 | + | ||
| 77 | +4. 安装 vLLM + vLLM-Ascend | ||
| 78 | +```shell | ||
| 79 | +git clone --depth 1 --branch v0.9.1 https://github.com/vllm-project/vllm | ||
| 80 | +cd vllm | ||
| 81 | +VLLM_TARGET_DEVICE=empty pip install -v -e . | ||
| 82 | +cd .. | ||
| 83 | +pip install vllm-ascend==0.9.1rc2 | ||
| 84 | +``` | ||
| 85 | + | ||
| 86 | +- 验证vllm是否安装 | ||
| 87 | +```shell | ||
| 88 | +python -c "from vllm import LLM; print('LLM class found:', LLM is not None)" | ||
| 89 | +``` | ||
| 90 | +若项目根目录存在 vllm/ 源码仓库文件夹,Python 把它当作命名空间包优先导入,遮蔽了真正以 editable 方式安装在 vllm/vllm/ 下的包,导致vllm导包失败,需要该 vllm 源码仓库目录重命名,消除遮蔽。 | ||
| 91 | +```shell | ||
| 92 | +cd Goedel-Prover && mv vllm vllm-source | ||
| 93 | +``` | ||
| 94 | + | ||
| 95 | +- 安装后确认 transformers 版本兼容: | ||
| 96 | +```shell | ||
| 97 | +pip install 'transformers>=4.51.1,<4.53.0' | ||
| 98 | +``` | ||
| 99 | + | ||
| 100 | +5. 安装 Lean 4 | ||
| 101 | +下载 elan(Lean 版本管理器): | ||
| 102 | +```shell | ||
| 103 | +curl -sSf https://raw.githubusercontent.com/leanprover/elan/master/elan-init.sh | sh -s -- -y --default-toolchain none | ||
| 104 | +``` | ||
| 105 | + | ||
| 106 | +手动安装 Lean 4 toolchain(如网络受限,可手动下载 lean-4.9.0-rc1-linux_aarch64.tar.zst): | ||
| 107 | +```shell | ||
| 108 | +mkdir -p ~/.elan/toolchains/leanprover--lean4---v4.9.0-rc1 | ||
| 109 | +cd ~/.elan/toolchains/leanprover--lean4---v4.9.0-rc1 | ||
| 110 | +tar --zstd -xf /path/to/lean-4.9.0-rc1-linux_aarch64.tar.zst --strip-components=1 | ||
| 111 | +``` | ||
| 112 | + | ||
| 113 | +添加到 PATH: | ||
| 114 | +```shell | ||
| 115 | +export PATH=$HOME/.elan/toolchains/leanprover--lean4---v4.9.0-rc1/bin:$HOME/.elan/bin:$PATH | ||
| 116 | +``` | ||
| 117 | + | ||
| 118 | +#### 构建 mathlib4 | ||
| 119 | +```shell | ||
| 120 | +cd mathlib4 | ||
| 121 | +lake build | ||
| 122 | +cd .. | ||
| 123 | +``` | ||
| 124 | +proofwidgets:optRelease 构建失败不影响证明验证,可忽略。 | ||
| 125 | + | ||
| 126 | +#### 权重下载 | ||
| 127 | +```shell | ||
| 128 | +git clone https://huggingface.co/Goedel-LM/Goedel-Prover-SFT | ||
| 129 | +``` | ||
| 130 | + | ||
| 131 | +#### 验证 | ||
| 132 | +验证 Lean 4 环境: | ||
| 133 | +```shell | ||
| 134 | +python prover/lean/verifier.py | ||
| 135 | +``` | ||
| 136 | + | ||
| 137 | +使用单题快速验证(NPU 卡号按需调整): | ||
| 138 | +```shell | ||
| 139 | +export ASCEND_RT_VISIBLE_DEVICES=2,3 | ||
| 140 | +sh eval/eval.sh -i datasets/mathd_algebra_338.jsonl -s test \ | ||
| 141 | + -m Goedel-LM/Goedel-Prover-SFT -o results/mathd_algebra_338/Godel-Prover-SFT \ | ||
| 142 | + -n 32 -g 2 -c 32 | ||
| 143 | +``` | ||
| 144 | + | ||
| 145 | +验证通过标准: | ||
| 146 | + | ||
| 147 | +- results/mathd_algebra_338/Godel-Prover-SFT/compilation_summarize.json 中 accuracy 为 100.00 | ||
| 148 | +- 三步(推理 → 编译 → 汇总)均正常退出 | ||
| 149 | + | ||
| 150 | +完整 miniF2F 评测: | ||
| 151 | +```shell | ||
| 152 | +sh eval/eval.sh -i datasets/minif2f.jsonl -s test \ | ||
| 153 | + -m /path/to/model -o results/minif2f/Godel-Prover-SFT \ | ||
| 154 | + -n 32 -g 2 -c 128 | ||
| 155 | +``` | ||
| @@ -0,0 +1,66 @@ | |||
| 1 | +diff --git a/eval/eval.sh b/eval/eval.sh | ||
| 2 | +index 7c0863c..d1b0969 100644 | ||
| 3 | +--- a/eval/eval.sh | ||
| 4 | ++++ b/eval/eval.sh | ||
| 5 | + | ||
| 6 | ++source /usr/local/Ascend/ascend-toolkit/set_env.sh | ||
| 7 | ++source /usr/local/Ascend/nnal/atb/set_env.sh --cxx_abi=0 | ||
| 8 | ++source /usr/local/Ascend/nnal/asdsip/set_env.sh | ||
| 9 | ++ | ||
| 10 | ++export LD_LIBRARY_PATH=/usr/local/Ascend/driver/lib64/driver:/usr/local/Ascend/driver/lib64/common:/usr/local/Ascend/driver/lib64:$LD_LIBRARY_PATH | ||
| 11 | ++ | ||
| 12 | ++export PYTHONPATH=$(python -c "import torch_npu; import os; print(os.path.join(os.path.dirname(torch_npu.__file__), 'dynamo'))"):$PYTHONPATH | ||
| 13 | + INPUT_PATH=datasets/minif2f.jsonl | ||
| 14 | + MODEL_PATH=Goedel-LM/Goedel-Prover-SFT | ||
| 15 | + OUTPUT_DIR=results/minif2f/Godel-Prover-SFT | ||
| 16 | + python -m eval.step2_compile --input_path $INPUT_FILE --output_path $COMPILE_OUT | ||
| 17 | + | ||
| 18 | + SUMMARIZE_OUTPUT_PATH=${OUTPUT_DIR}/compilation_summarize.json | ||
| 19 | + python -m eval.step3_summarize_compile --input_path $COMPILE_OUTPUT_PATH --output_path $SUMMARIZE_OUTPUT_PATH --field ${FIELD} | ||
| 20 | +- | ||
| 21 | +diff --git a/eval/step1_inference.py b/eval/step1_inference.py | ||
| 22 | +index ba6b449..17d299c 100644 | ||
| 23 | +--- a/eval/step1_inference.py | ||
| 24 | ++++ b/eval/step1_inference.py | ||
| 25 | + | ||
| 26 | + import re | ||
| 27 | + from transformers import AutoTokenizer | ||
| 28 | + from vllm import LLM, SamplingParams | ||
| 29 | +- | ||
| 30 | ++import torch | ||
| 31 | ++import torch_npu | ||
| 32 | ++from torch_npu.contrib import transfer_to_npu | ||
| 33 | + import json | ||
| 34 | + import argparse | ||
| 35 | + | ||
| 36 | +diff --git a/requirements.txt b/requirements.txt | ||
| 37 | +index 10c89e4..8fdb2f2 100644 | ||
| 38 | +--- a/requirements.txt | ||
| 39 | ++++ b/requirements.txt | ||
| 40 | + | ||
| 41 | ++setuptools<71 | ||
| 42 | ++torch==2.5.1 | ||
| 43 | ++torch_npu==2.5.1.post1 | ||
| 44 | + pytz==2022.1 | ||
| 45 | + termcolor==2.4.0 | ||
| 46 | + easydict==1.13 | ||
| 47 | + tabulate==0.9.0 | ||
| 48 | + transformers==4.46.1 | ||
| 49 | +-torch==2.4.0 | ||
| 50 | +-torchvision==0.19.0 | ||
| 51 | + numpy==1.26.4 | ||
| 52 | + pandas==1.4.3 | ||
| 53 | + accelerate==0.33.0 | ||
| 54 | +-flash-attn==2.6.3 | ||
| 55 | +-vllm==0.6.3.post1 | ||
| 56 | +-vllm_nccl_cu12==2.18.1.0.4.0 | ||
| 57 | + | ||
| 58 | ++decorator | ||
| 59 | ++attrs | ||
| 60 | ++psutil | ||
| 61 | ++absl-py | ||
| 62 | ++cloudpickle | ||
| 63 | ++ml-dtypes | ||
| 64 | ++scipy | ||
| 65 | ++tornado | ||
| 66 | + | ||
| @@ -0,0 +1,19 @@ | |||
| 1 | +setuptools<71 | ||
| 2 | +torch==2.5.1 | ||
| 3 | +torch_npu==2.5.1.post1 | ||
| 4 | +pytz==2022.1 | ||
| 5 | +termcolor==2.4.0 | ||
| 6 | +easydict==1.13 | ||
| 7 | +tabulate==0.9.0 | ||
| 8 | +transformers==4.46.1 | ||
| 9 | +numpy==1.26.4 | ||
| 10 | +pandas==1.4.3 | ||
| 11 | +accelerate==0.33.0 | ||
| 12 | +decorator | ||
| 13 | +attrs | ||
| 14 | +psutil | ||
| 15 | +absl-py | ||
| 16 | +cloudpickle | ||
| 17 | +ml-dtypes | ||
| 18 | +scipy | ||
| 19 | +tornado | ||