Project Icon

UrbanGPT

时空大语言模型助力城市智能分析与建模

UrbanGPT是一款创新的时空大语言模型,融合时空依赖性编码器和指令微调范式。该模型能够理解复杂的时空相互依赖关系,在数据稀缺情况下实现全面准确的预测。UrbanGPT在多种城市任务中展现出优秀的泛化能力,尤其在零样本场景下表现出色,为城市规划和管理提供了有力的智能分析支持。

UrbanGPT:时空大型语言模型

论文《UrbanGPT:时空大型语言模型》的PyTorch实现

李中航夏良昊唐嘉宾徐勇石磊夏龙尹大伟黄超* (*通讯作者)

香港大学数据智能实验室华南理工大学、百度公司


YouTube • 🌐 中文博客

本仓库包含UrbanGPT的代码、数据和模型权重。


🎉 新闻

  • 🚀🔥 [2024.05] 🎯🎯📢📢 激动人心的消息!我们非常高兴地宣布,我们的🌟UrbanGPT🌟已被KDD'2024录用!🎉🎉🎉 感谢所有团队成员🤗

🎯🎯📢📢 我们在🤗Hugging Face上上传了UrbanGPT使用的模型数据。我们强烈建议参考下表了解更多详情:

🤗 Hugging Face地址🎯 描述
https://huggingface.co/bjdwh/UrbanGPT这是我们基于Vicuna-7B-v1.5-16k的UrbanGPT检查点,经过train-data指令数据的微调
https://huggingface.co/datasets/bjdwh/ST_data_urbangpt我们发布了部分用于评估的指令数据集。
https://huggingface.co/datasets/bjdwh/UrbanGPT_ori_stdata我们发布了UrbanGPT使用的原始数据集。
  • [2023.02.23] 🚀🚀 发布UrbanGPT的代码。
  • [2023.02.29] 添加视频。
  • [2023.03.05] 发布完整论文。
  • [2023.03.11] 上传UrbanGPT的新检查点。
  • [2023.06.07] 发布指令生成代码和UrbanGPT使用的原始数据集。

👉 待办事项

  • 发布基线代码。
  • ...

简介

在这项工作中,我们提出了一个时空大型语言模型,它能够在广泛的下游城市任务中展现出卓越的泛化能力。为实现这一目标,我们提出了UrbanGPT,它无缝集成了时空依赖编码器和指令微调范式。这种集成使得大型语言模型(LLMs)能够理解时间和空间之间复杂的相互依赖关系,从而在数据稀缺的情况下促进更全面和准确的预测。广泛的实验结果突显了为时空学习构建LLMs的潜力,特别是在零样本场景中。 提出的UrbanGPT的详细框架。

演示视频

https://github.com/HKUDS/UrbanGPT/assets/90381931/9cd094b4-8fa3-486f-890d-631a08b19b4a


入门指南

目录:


1. 代码结构 [返回顶部]

.
|   README.md
|   urbangpt_eval.sh
|   urbangpt_train.sh
|   
+---checkpoints
|   \---st_encoder
|           pretrain_stencoder.pth
|           
+---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
|           
+---tests
|       test_openai_curl.sh
|       test_openai_langchain.py
|       test_openai_sdk.py
|       
\---urbangpt
    |   constants.py
    |   conversation.py
    |   utils.py
    |   __init__.py
    |   
    +---eval
    |   |   run_urbangpt.py                     # 评估
    |   |   run_vicuna.py
    |   |   
    |   \---script
    |           run_model_qa.yaml
    |           
    +---model
    |   |   apply_delta.py
    |   |   apply_lora.py
    |   |   builder.py
    |   |   compression.py
    |   |   convert_fp16.py
    |   |   make_delta.py
    |   |   model_adapter.py
    |   |   model_registry.py
    |   |   monkey_patch_non_inplace.py
    |   |   STLlama.py                          # 模型
    |   |   utils.py
    |   |   __init__.py
    |   |   
    |   \---st_layers
    |           args.py
    |           ST_Encoder.conf
    |           ST_Encoder.py                   # ST-编码器
    |           __init__.py
    |           
    +---protocol
    |       openai_api_protocol.py
    |       
    +---serve
    |   |   api_provider.py
    |   |   bard_worker.py
    |   |   cacheflow_worker.py
    |   |   cli.py
    |   |   controller.py
    |   |   controller_graph.py
    |   |   gradio_block_arena_anony.py
    |   |   gradio_block_arena_named.py
    |   |   gradio_css.py
    |   |   gradio_patch.py
    |   |   gradio_web_server.py
    |   |   gradio_web_server_graph.py
    |   |   gradio_web_server_multi.py
    |   |   huggingface_api.py
    |   |   inference.py
    |   |   model_worker.py
    |   |   model_worker_graph.py
    |   |   openai_api_server.py
    |   |   register_worker.py
    |   |   test_message.py
    |   |   test_throughput.py
    |   |   __init__.py
    |   |   
    |   +---examples
    |   |       extreme_ironing.jpg
    |   |       waterview.jpg
    |   |       
    |   +---gateway
    |   |       nginx.conf
    |   |       README.md
    |   |       
    |   \---monitor
    |           basic_stats.py
    |           clean_battle_data.py
    |           elo_analysis.py
    |           hf_space_leaderboard_app.py
    |           monitor.py
    |           
    \---train
            llama2_flash_attn_monkey_patch.py
            llama_flash_attn_monkey_patch.py
            stchat_trainer.py
            train_lora.py
            train_mem.py
            train_st.py                         # 训练
            

<环境/>

2.环境 [返回顶部]

请先克隆仓库并安装所需环境,可以通过运行以下命令完成:

conda create -n urbangpt python=3.9.13

conda activate urbangpt

# 安装支持CUDA 11.7的Torch
pip install torch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2

# 支持vicuna基础模型
pip3 install "fschat[model_worker,webui]"

# 安装pyg和相关包
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.0.1+cu117.html

# 克隆我们的UrabnGPT或下载
git clone https://github.com/HKUDS/UrbanGPT.git
cd UrbanGPT
# 安装必需的库
# (建议使用以下方法单独安装)
pip install deepspeed
pip install ray
pip install einops
pip install wandb
# ("flash-attn"和"transformers"之间存在版本兼容性问题。请参考flash-attn的[GitHub链接](https://github.com/Dao-AILab/flash-attention)获取更多信息。)
pip install flash-attn==2.3.5  # 或从(https://github.com/Dao-AILab/flash-attention/releases)下载,例如 flash_attn-2.3.5+cu117torch2.0cxx11abiFALSE-cp39-cp39-linux_x86_64.whl
pip install transformers==4.34.0

# (或者您可以根据requirements文件安装。)
pip install -r requirements.txt

3. 训练UrbanGPT [返回顶部]

3.1. 准备预训练检查点 [返回顶部]

UrabnGPT基于以下优秀的现有模型进行训练。 请按照说明准备检查点。

  • Vicuna: 准备我们的基础模型Vicuna,这是一个经过指令微调的聊天机器人,也是我们实现中的基础模型。请在这里下载其权重。我们通常使用v1.5和v1.5-16k版本的7B参数模型。您应该更新vicuna的'config.json',例如,v1.5-16k中的'config.json'可以在config.json中找到。

  • 时空编码器: 我们使用一个简单的基于TCNs的时空编码器来编码时空依赖关系。st_encoder的权重是通过典型的多步时空预测任务预训练的。

  • 时空训练数据: 我们使用的预训练数据包括纽约市的出租车、自行车和犯罪数据,包括时空统计数据、记录的时间戳以及关于区域兴趣点(POIs)的信息。这些数据组织在train_data中。请下载并将其放在./UrbanGPT/ST_data_urbangpt/train_data目录下。

3.2. 指令微调 [返回顶部]

  • 开始微调: 完成上述步骤后,您可以通过填写urbangpt_train.sh中的空白来开始指令微调。以下是一个示例:
# 填写以下路径以运行我们的UrbanGPT!
model_path=./checkpoints/vicuna-7b-v1.5-16k
instruct_ds=./ST_data_urbangpt/train_data/multi_NYC.json
st_data_path=./ST_data_urbangpt/train_data/multi_NYC_pkl.pkl
pretra_ste=ST_Encoder
output_model=./checkpoints/UrbanGPT

wandb offline
python -m torch.distributed.run --nnodes=1 --nproc_per_node=8 --master_port=20001 \
    urbangpt/train/train_mem.py \
    --model_name_or_path ${model_path} \
    --version v1 \
    --data_path ${instruct_ds} \
    --st_content ./TAXI.json \
    --st_data_path ${st_data_path} \
    --st_tower ${pretra_ste} \
    --tune_st_mlp_adapter True \
    --st_select_layer -2 \
    --use_st_start_end \
    --bf16 True \
    --output_dir ${output_model} \
    --num_train_epochs 3 \
    --per_device_train_batch_size 4 \
    --per_device_eval_batch_size 4 \
    --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

4. 评估UrbanGPT [返回顶部]

#### 4.1. 准备检查点和数据 [返回顶部]
  • 检查点: 您可以尝试使用自己的模型或我们发布的检查点来评估UrbanGPT。
  • 数据: 我们为NYC-taxi数据集划分了测试集,并制作了用于评估的指令数据。请参考evaluating

4.2. 运行评估 [返回顶部]

您可以通过填写urbangpt_eval.sh中的空白处来开始第二阶段的调优。以下是一个示例:

# 在以下路径中填写评估相关内容!
output_model=./checkpoints/tw2t_multi_reg-cla-gird
datapath=./ST_data_urbangpt/NYC_taxi_cross-region/NYC_taxi.json
st_data_path=./ST_data_urbangpt/NYC_taxi_cross-region/NYC_taxi_pkl.pkl
res_path=./result_test/cross-region/NYC_taxi
start_id=0
end_id=51920
num_gpus=8

python ./urbangpt/eval/run_urbangpt.py --model-name ${output_model}  --prompting_file ${datapath} --st_data_path ${st_data_path} --output_res_path ${res_path} --start_id ${start_id} --end_id ${end_id} --num_gpus ${num_gpus}

4.3. 评估指标计算 [返回顶部]

您可以使用result_test.py来计算预测结果的性能指标。


5. 指令生成 [返回顶部]

您可以使用instruction_generate.py中的代码生成您需要的特定指令。例如:

-dataset_name: 选择数据集。# NYC_multi(用于训练)    NYC_taxi NYC_bike NYC_crime1 NYC_crime2 CHI_taxi(用于测试)
# 以下选项只能有一个设置为True
-for_zeroshot: 是否用于零样本预测。
-for_supervised: 是否用于监督预测。
-for_ablation: 是否用于消融研究。

# 创建用于训练的指令数据
python instruction_generate.py -dataset_name NYC_multi

# 创建NYC_taxi数据集的指令数据,以便在UrbanGPT的零样本设置下进行测试
python instruction_generate.py -dataset_name NYC_taxi -for_zeroshot True

引用

如果您在研究或应用中发现UrbanGPT有用,请引用:

@misc{li2024urbangpt,
      title={UrbanGPT: Spatio-Temporal Large Language Models}, 
      author={Zhonghang Li and Lianghao Xia and Jiabin Tang and Yong Xu and Lei Shi and Long Xia and Dawei Yin and Chao Huang},
      year={2024},
      eprint={2403.00813},
      archivePrefix={arXiv},
      primaryClass={cs.CL}
}

致谢

您可以参考作为我们框架和代码仓库基础的相关工作,Vicuna。我们也部分借鉴了GraphGPT的灵感。我们网站和README.md的设计灵感来自NExT-GPT,我们的系统部署设计灵感来自gradioBaize。感谢他们的出色工作。

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

稿定AI

稿定设计 是一个多功能的在线设计和创意平台,提供广泛的设计工具和资源,以满足不同用户的需求。从专业的图形设计师到普通用户,无论是进行图片处理、智能抠图、H5页面制作还是视频剪辑,稿定设计都能提供简单、高效的解决方案。该平台以其用户友好的界面和强大的功能集合,帮助用户轻松实现创意设计。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号