The lightweight training requires PyTorch 2.1+, so we need to update corresponding libraries:
# if you have set up the env for GraphGPT earlier
pip uninstall torch
pip uninstall torchvision
pip uninstall torchaudio
# CUDA 11.8
pip install torch==2.1.0 torchvision==0.16.0 torchaudio==2.1.0 --index-url https://download.pytorch.org/whl/cu118
# update pyg for the PyTorch 2.1+
pip install torch_geometric
pip install pyg_lib torch_scatter torch_sparse torch_cluster torch_spline_conv -f https://data.pyg.org/whl/torch-2.1.0+cu118.html
# install lightning
pip install lightning
Due to compatibility issues, if you are using the previously released graph data, we recommend downloading and updating it according to the provided link: updated graph data.
You can run the scripts as follow:
Stage-1:
cd path/to/GraphGPT
sh ./scripts/tune_script/graphgpt_stage1.sh
Stage-2:
cd path/to/GraphGPT
sh ./scripts/tune_script/graphgpt_stage2.sh
๐ฏ๐ฏ๐ข๐ข We have made significant updates to the models and data used in our GraphGPT on ๐ค Huggingface. We highly recommend referring to the table below for further details:
๐ค Huggingface Address | ๐ฏ Description |
---|---|
huggingface.co/Jiabin99/GraphGPT-7B-mix-all | It's the checkpoint of our GraphGPT based on Vicuna-7B-v1.5 tuned on instruction data Arxiv-PubMed-mix-NC-LP |
huggingface.co/Jiabin99/Arxiv-PubMed-GraphCLIP-GT | It's the checkpoint of the pre-trained graph transformer (GT) trained on Arxiv and PubMed using Text-Graph grounding. |
huggingface.co/datasets/Jiabin99/Arxiv-PubMed-mix-NC-LP | This's the mixing instruction dataset with node classification (NC) and link prediction (LP) on Arxiv and PubMed. |
huggingface.co/datasets/Jiabin99/GraphGPT-eval-instruction | We release all instruction dataset for our evaluation. |
huggingface.co/datasets/Jiabin99/All_pyg_graph_data | We merge all utilized graph data. |
huggingface.co/datasets/Jiabin99/graph-matching | This is the instruction data used in graph-matching stage. |
[x] [2023.10.28]๐ข๐ขFor the Chinese version of the explanation, please refer to this article.
[x] [2023.10.26]๐ฅ๐ฅRelease our utilized Instruction data.
[x] [2023.10.26]๐ฅ๐ฅRelease checkpoints of our GraphGPT and pre-trained graph encoder.
[x] [2023.10.23] ๐๐ The full paper of our GraphGPT is available at https://arxiv.org/abs/2310.13023. Please check out it and give us more feedbacks!
[x] [2023.10.15] ๐๐ Release the code of GraphGPT.
we present the GraphGPT framework that aligns LLMs with graph structural knowledge with a graph instruction tuning paradigm.
For more technical details, kindly refer to the paper and the project website of our Graph.
.
โโโ README.md
โโโ assets
โย ย โโโ demo_narrow.gif
โย ย โโโ screenshot_cli.png
โย ย โโโ screenshot_gui.png
โย ย โโโ server_arch.png
โย ย โโโ vicuna_logo.jpeg
โโโ format.sh
โโโ graphgpt
โย ย โโโ __init__.py
โย ย โโโ constants.py
โย ย โโโ conversation.py
โย ย โโโ eval
โย ย โย ย โโโ README.md
โย ย โย ย โโโ requirements.txt
โย ย โย ย โโโ run_graphgpt.py
โย ย โย ย โโโ run_graphgpt_LP.py
โย ย โย ย โโโ run_vicuna.py
โย ย โย ย โโโ script
โย ย โย ย โโโ run_model_qa.yaml
โย ย โโโ model
โย ย โย ย โโโ GraphLlama.py
โย ย โย ย โโโ __init__.py
โย ย โย ย โโโ apply_delta.py
โย ย โย ย โโโ apply_lora.py
โย ย โย ย โโโ builder.py
โย ย โย ย โโโ compression.py
โย ย โย ย โโโ convert_fp16.py
โย ย โย ย โโโ graph_layers
โย ย โย ย โย ย โโโ __init__.py
โย ย โย ย โย ย โโโ bpe_simple_vocab_16e6.txt.gz
โย ย โย ย โย ย โโโ clip_graph.py
โย ย โย ย โย ย โโโ graph_transformer.py
โย ย โย ย โย ย โโโ mpnn.py
โย ย โย ย โย ย โโโ simple_tokenizer.py
โย ย โย ย โโโ make_delta.py
โย ย โย ย โโโ model_adapter.py
โย ย โย ย โโโ model_registry.py
โย ย โย ย โโโ monkey_patch_non_inplace.py
โย ย โย ย โโโ utils.py
โย ย โโโ protocol
โย ย โย ย โโโ openai_api_protocol.py
โย ย โโโ serve
โย ย โย ย โโโ __init__.py
โย ย โย ย โโโ api_provider.py
โย ย โย ย โโโ bard_worker.py
โย ย โย ย โโโ cacheflow_worker.py
โย ย โย ย โโโ cli.py
โย ย โย ย โโโ controller.py
โย ย โย ย โโโ gateway
โย ย โย ย โย ย โโโ README.md
โย ย โย ย โย ย โโโ nginx.conf
โย ย โย ย โโโ gradio_block_arena_anony.py
โย ย โย ย โโโ gradio_block_arena_named.py
โย ย โย ย โโโ gradio_css.py
โย ย โย ย โโโ gradio_patch.py
โย ย โย ย โโโ gradio_web_server.py
โย ย โย ย โโโ gradio_web_server_multi.py
โย ย โย ย โโโ huggingface_api.py
โย ย โย ย โโโ inference.py
โย ย โย ย โโโ model_worker.py
โย ย โย ย โโโ monitor
โย ย โย ย โย ย โโโ basic_stats.py
โย ย โย ย โย ย โโโ clean_battle_data.py
โย ย โย ย โย ย โโโ elo_analysis.py
โย ย โย ย โย ย โโโ hf_space_leaderboard_app.py
โย ย โย ย โย ย โโโ monitor.py
โย ย โย ย โโโ openai_api_server.py
โย ย โย ย โโโ register_worker.py
โย ย โย ย โโโ test_message.py
โย ย โย ย โโโ test_throughput.py
โย ย โโโ train
โย ย โย ย โโโ graphchat_trainer.py
โย ย โย ย โโโ llama_flash_attn_monkey_patch.py
โย ย โย ย โโโ train_graph.py
โย ย โย ย โโโ train_lora.py
โย ย โย ย โโโ train_mem.py
โย ย โโโ utils.py
โโโ playground
โย ย โโโ inspect_conv.py
โย ย โโโ test_embedding
โย ย โย ย โโโ README.md
โย ย โย ย โโโ test_classification.py
โย ย โย ย โโโ test_semantic_search.py
โย ย โย ย โโโ test_sentence_similarity.py
โย ย โโโ test_openai_api
โย ย โโโ anthropic_api.py
โย ย โโโ openai_api.py
โโโ pyproject.toml
โโโ scripts
โย ย โโโ eval_script
โย ย โย ย โโโ graphgpt_eval.sh
โย ย โโโ extract_graph_projector.py
โย ย โโโ serving
โย ย โย ย โโโ controller.yaml
โย ย โย ย โโโ model_worker.yaml
โย ย โโโ tune_script
โย ย โโโ extract_projector.sh
โย ย โโโ graphgpt_stage1.sh
โย ย โโโ graphgpt_stage2.sh
โโโ tests
โโโ test_openai_curl.sh
โโโ test_openai_langchain.py
โโโ test_openai_sdk.py
Please first clone the repo and install the required environment, which can be done by running the following commands:
conda create -n graphgpt python=3.8
conda activate graphgpt
# Torch with CUDA 11.7
pip install torch==1.13.0+cu117 torchvision==0.14.0+cu117 torchaudio==0.13.0 --extra-index-url https://download.pytorch.org/whl/cu117
# To support vicuna base model
pip3 install "fschat[model_worker,webui]"
# To install pyg and pyg-relevant packages
pip install torch_geometric
pip install pyg_lib torch_scatter torch_sparse torch_cluster torch_spline_conv -f https://data.pyg.org/whl/torch-1.13.0+cu117.html
# Clone our GraphGPT
git clone https://github.com/HKUDS/GraphGPT.git
cd GraphGPT
# Install required libraries
pip install -r requirements.txt
GraphGPT tuning paradigm consists of two stages: (1) self-supervised instruction tuning; (2) task-specific instruction tuning.
GraphGPT is trained based on following excellent existing models. Please follow the instructions to prepare the checkpoints.
Vicuna
:
Prepare our base model Vicuna, which is an instruction-tuned chatbot and base model in our implementation. Please download its weights here. We generally utilize v1.1 and v1.5 model with 7B parameters.
Graph Encoder
:
is used to encode graph structures. We employ text-graph grounding approach to obtain the pre-trained graph transformer model, which you could download by graph transformer and put it at [./GraphGPT]. We also provide source codes and example Cora data for text-graph grounding at [./text-graph-grounding] for your reference.
Graph Data
:
is a combination of all utilized pyg graph data that contain node features, edge_index and so on. You can download by all_graph_data.pt and put it at [./GraphGPT/graph_data]
Prepare data: Please download our instruction tuning data graph_matching.json for the graph matching task.
Start tuning: After the aforementioned steps, you could start the first stage tuning by filling blanks at graphgpt_stage1.sh. There is an example as below:
# to fill in the following path to run the first stage of our GraphGPT!
model_path=../vicuna-7b-v1.5-16k
instruct_ds=./data/stage_1/graph_matching.json
graph_data_path=./graph_data/all_graph_data.pt
pretra_gnn=clip_gt_arxiv
output_model=./checkpoints/stage_1
wandb offline
python -m torch.distributed.run --nnodes=1 --nproc_per_node=4 --master_port=20001 \
graphgpt/train/train_mem.py \
--model_name_or_path ${model_path} \
--version v1 \
--data_path ${instruct_ds} \
--graph_content ./arxiv_ti_ab.json \
--graph_data_path ${graph_data_path} \
--graph_tower ${pretra_gnn} \
--tune_graph_mlp_adapter True \
--graph_select_layer -2 \
--use_graph_start_end \
--bf16 True \
--output_dir ${output_model} \
--num_train_epochs 3 \
--per_device_train_batch_size 2 \
--per_device_eval_batch_size 2 \
--gradient_accumulation_steps 1 \
--evaluation_strategy "no" \
--save_strategy "steps" \
--save_steps 2400 \
--save_total_limit 1 \
--learning_rate 2e-3 \
--weight_decay 0. \
--warmup_ratio 0.03 \
--lr_scheduler_type "cosine" \
--logging_steps 1 \
--tf32 True \
--model_max_length 2048 \
--gradient_checkpointing True \
--lazy_preprocess True \
--report_to wandb
We could extract the trained projector in the stage 1 by filling blanks at extract_projector.sh. There is an example as below:
# to fill in the following path to extract projector for the first tuning stage!
src_model=./checkpoints/stage_1
output_proj=./checkpoints/stage_1_projector/stage_1_projector.bin
python3.8 ./scripts/extract_graph_projector.py \
--model_name_or_path ${src_model} \
--output ${output_proj}
Prepare data: The choices of our task-specific instruction data could be diverse, e.g., standard or COT (Chain-of-Thought) node classification, link prediction or mixing data for multitasking. Please refer to the task_specific.
Start tuning: After the aforementioned steps, you could start the second stage tuning by filling blanks at graphgpt_stage2.sh. There is an example as below:
# to fill in the following path to run the second stage of our GraphGPT!
model_path=../vicuna-7b-v1.5-16k
instruct_ds=./data/stage_2/data_all_mix.json
graph_data_path=./graph_data/all_graph_data.pt
pretra_gnn=clip_gt_arxiv
tuned_proj=./checkpoints/stage_1_projector/stage_1_projector.bin
output_model=./checkpoints/stage_2
wandb offline
python -m torch.distributed.run --nnodes=1 --nproc_per_node=4 --master_port=20001 \
graphgpt/train/train_mem.py \
--model_name_or_path ${model_path} \
--version v1 \
--data_path ${instruct_ds} \
--graph_content ./arxiv_ti_ab.json \
--graph_data_path ${graph_data_path} \
--graph_tower ${pretra_gnn} \
--pretrain_graph_mlp_adapter ${tuned_proj} \
--tune_graph_mlp_adapter True \
--graph_select_layer -2 \
--use_graph_start_end True\
--bf16 True \
--output_dir ${output_model} \
--num_train_epochs 2 \
--per_device_train_batch_size 1 \
--per_device_eval_batch_size 1 \
--gradient_accumulation_steps 1 \
--evaluation_strategy "no" \
--save_strategy "steps" \
--save_steps 50000 \
--save_total_limit 1 \
--learning_rate 2e-5 \
--weight_decay 0. \
--warmup_ratio 0.03 \
--lr_scheduler_type "cosine" \
--logging_steps 1 \
--tf32 True \
--model_max_length 2048 \
--gradient_checkpointing True \
--dataloader_num_workers 4 \
--lazy_preprocess True \
--report_to wandb
You could start the second stage tuning by filling blanks at graphgpt_eval.sh. There is an example as below:
# to fill in the following path to extract projector for the second tuning stage!
output_model=./checkpoints/stage_2
datapath=./data/eval/arxiv_nc.json
graph_data_path=./graph_data/all_graph_data.pt
res_path=./output_stage_2_arxiv_nc
start_id=0
end_id=20000
num_gpus=2
python3.8 ./graphgpt/eval/run_graphgpt.py --model-name ${output_model} --prompting_file ${datapath} --graph_data_path ${graph_data_path} --output_res_path ${res_path} --start_id ${start_id} --end_id ${end_id} --num_gpus ${num_gpus}
For any questions or feedback, feel free to contact Jiabin Tang.
If you find GraphGPT useful in your research or applications, please kindly cite:
@articles{tang2023graphgpt,
title={GraphGPT: Graph Instruction Tuning for Large Language Models},
author={Jiabin Tang and Yuhao Yang and Wei Wei and Lei Shi and Lixin Su and Suqi Cheng and Dawei Yin and Chao Huang},
year={2023},
eprint={2310.13023},
archivePrefix={arXiv},
primaryClass={cs.CL}
}
You may refer to related work that serves as foundations for our framework and code repository, Vicuna, LLaVa, We also partially draw inspirations from MiniGPT-4. For the text-graph grounding design, we leverages implementation from G2P2. The design of our website and README.md was inspired by NExT-GPT. Thanks for their wonderful works.