当前位置:   article > 正文

ChatGPT开源平替(2)llama_llama2 下载 链接

llama2 下载 链接

        最近,FacebookResearch 开源了他们最新的大语言模型 LLaMA,训练使用多达14,000 tokens 语料,包含不同大小参数量的模型 7B、13B 、30B、 65B,研究者可以根据自身算力配置进行选择。

        经过测试,(1)在算力要求上,7B的模型,需要19G显存要求,单卡3090可部署。(2)在生成效果上,额...,还行吧。

首先下载模型及代码:

    (1)模型:

        项目里是要求提交申请,然后Facebook官方发送模型下载链接,通过链接下载完整模型文件,才能运行项目,实测在huggingface上去下载拆分后的模型是不能运行的项目的。由于一直没有收到官方邮件提供的下载地址,我在网上找到了各大版本的模型文件下载链接:

7Bipfs://QmbvdJ7KgvZiyaqHw5QtQxRtUd7pCAdkWWbzuvyKusLGTw
13Bipfs://QmPCfCEERStStjg4kfj3cmCUu1TP7pVQbxdFMwnhpuJtxk
30Bipfs://QmSD8cxm4zvvnD35KKFu8D9VjXAavNoGWemPW1pQ3AF9ZZ
65Bipfs://QmdWH379NQu8XoesA8AFw9nKV2MpGR4KohK7WyugadAKTh

    (2)代码:

        https://github.com/facebookresearch/llama

运行模型:

        由于官方给的例子是写死的,不是一问一答交互形式,我将其改了一下:

  1. # cli.py
  2. import os,time, json,sys
  3. import argparse
  4. from waitress import serve
  5. from typing import Tuple
  6. import torch
  7. from pathlib import Path
  8. import torch.distributed as dist
  9. from fairscale.nn.model_parallel.initialize import initialize_model_parallel
  10. from llama import ModelArgs, Transformer, Tokenizer, LLaMA
  11. def setup_model_parallel() -> Tuple[int, int]:
  12. local_rank = int(os.environ.get("LOCAL_RANK", -1))
  13. world_size = int(os.environ.get("WORLD_SIZE", -1))
  14. print(f"local:{local_rank},world:{world_size}")
  15. dist.init_process_group("nccl")
  16. initialize_model_parallel(world_size)
  17. torch.cuda.set_device(local_rank)
  18. # seed must be the same in all processes
  19. torch.manual_seed(1)
  20. return local_rank, world_size
  21. def load(ckpt_dir: str, tokenizer_path: str, local_rank: int, world_size: int) -> LLaMA:
  22. start_time = time.time()
  23. checkpoints = sorted(Path(ckpt_dir).glob("*.pth"))
  24. assert (
  25. world_size == len(checkpoints)
  26. ), f"Loading a checkpoint for MP={len(checkpoints)} but world size is {world_size}"
  27. ckpt_path = checkpoints[local_rank]
  28. print("Loading")
  29. checkpoint = torch.load(ckpt_path, map_location="cpu")
  30. with open(Path(ckpt_dir) / "params.json", "r") as f:
  31. params = json.loads(f.read())
  32. model_args: ModelArgs = ModelArgs(max_seq_len=1024, max_batch_size=8, **params)
  33. tokenizer = Tokenizer(model_path=tokenizer_path)
  34. model_args.vocab_size = tokenizer.n_words
  35. torch.set_default_tensor_type(torch.cuda.HalfTensor)
  36. model = Transformer(model_args)
  37. torch.set_default_tensor_type(torch.FloatTensor)
  38. model.load_state_dict(checkpoint, strict=False)
  39. generator = LLaMA(model, tokenizer)
  40. print(f"Loaded in {time.time() - start_time:.2f} seconds")
  41. return generator
  42. if __name__ == "__main__":
  43. parser = argparse.ArgumentParser()
  44. parser.add_argument("--ckpt_dir")
  45. parser.add_argument("--tokenizer_path", type=str)
  46. args = parser.parse_args()
  47. local_rank, world_size = setup_model_parallel()
  48. generator = load(args.ckpt_dir, args.tokenizer_path, local_rank, world_size)
  49. print("------------------ Welcome to the llama model -------------------\n")
  50. while True:
  51. prompt = input("User: ")
  52. if prompt =="cls":
  53. break
  54. print("LLAMA: ", end="")
  55. input_text = [prompt]
  56. # max_gen_len= input["max_gen_len"]
  57. results = generator.generate(input_text, max_gen_len=512, temperature=0.8, top_p=0.95)[0]
  58. print(results)
  59. """
  60. 启动服务:
  61. CUDA_VISIBLE_DEVICES=0 torchrun --nproc_per_node 1 cli.py --ckpt_dir $ckpt --tokenizer_path $tokenizer
  62. """

测试结果:

(1)英文交互

b319c2e81d4540ccb5e601bb4e9d1bfb.png

(2)中文交互    

9e16dc6283a561c1db270ef2b8e234e4.png

        明显发现,llama中文交互效果较差,并且在英文生成回复上也没有chatgpt流畅圆滑,可能是由于Facebook为了抢风头,在数据质量和数据范围方面没有做太多工作,或者是因为这只是llama的demo版本,Facebook正在憋大招吧。

        请关注公众号:NLP有品,定期分享NLP干货。

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/345782
推荐阅读
相关标签
  

闽ICP备14008679号