diff --git a/docs/msadapter/docs/source_zh_cn/msadapter_user_guide/constraints.md b/docs/msadapter/docs/source_zh_cn/msadapter_user_guide/constraints.md index 5397a4b60e8f3f119821794244802da94625fda8..c1fd89fa8b419fdba25d9c4fb5c42f8d6bcda204 100755 --- a/docs/msadapter/docs/source_zh_cn/msadapter_user_guide/constraints.md +++ b/docs/msadapter/docs/source_zh_cn/msadapter_user_guide/constraints.md @@ -68,12 +68,12 @@ MSAdapter只需要调用grad_fn就能够一次性调用正向计算加反向计 - Dispatch机制:当用户执行任何张量操作(例如加法、乘法等)时,实际上都是通过PyTorch的dispatch机制进行的。该机制决定了哪个具体实现(CPU、CUDA等)应该被执行。 - torch.Tensor的子类化:通过创建一个继承自torch.Tensor的新类,并使用@torch_dispatch装饰器,用户可以自定义这些操作的行为。 -当前MindSpore Storage机制在规划设计中,未来会支持。当前MSAdatper暂时不支持以下相关接口: +当前MindSpore Storage机制在规划设计中,未来会支持。当前MSAdapter暂时不支持以下相关接口: 1. torch.Tensor.to() 2. torch自定义算子涉及dispatch部分 -**以上接口需要用户手动修改,即无需进行.to()操作, MSAdatper默认将模型与Tensor放置于Ascend NPU。可参考[快速入门](quick_start.md#torchtensorto)。** +**以上接口需要用户手动修改,即无需进行.to()操作, MSAdapter默认将模型与Tensor放置于Ascend NPU。可参考[快速入门](quick_start.md#torchtensorto)。** ## Storage机制 diff --git a/docs/msadapter/docs/source_zh_cn/msadapter_user_guide/install.md b/docs/msadapter/docs/source_zh_cn/msadapter_user_guide/install.md index de5c714444c748fccc71a2a5a919da7e32796eab..c478bbeaa5e3fc7195ed3b72f9e45e6233b90fb9 100755 --- a/docs/msadapter/docs/source_zh_cn/msadapter_user_guide/install.md +++ b/docs/msadapter/docs/source_zh_cn/msadapter_user_guide/install.md @@ -11,19 +11,14 @@ pip install torch==2.1.0 pip install mindspore ``` -## 2. 下载MSAdapter源码 +## 2. 下载安装MSAdapter源码 -```bash -git clone https://openi.pcl.ac.cn/OpenI/MSAdapter -``` - -## 3. 安装MSAdapter - -请注意目前MSAdatper不支持`pip install msadapter`,仅支持源码直接使用和源码编译安装。 +目前MSAdapter不支持`pip install msadapter`方式安装,仅支持源码直接使用和源码编译安装。 - 如果用户希望直接使用源码,设置如下环境环境变量: - ```bash + ``` bash + git clone https://openi.pcl.ac.cn/OpenI/MSAdapter export $PYTHONPATH=your_workspace/MSAdapter/mindtorch ``` @@ -32,6 +27,8 @@ git clone https://openi.pcl.ac.cn/OpenI/MSAdapter - 如果用户希望以Python安装包编译的形式使用,进入MSAdapter目录,进行源码编译操作: ```bash + git clone https://openi.pcl.ac.cn/OpenI/MSAdapter + cd MSAdapter pip install . ``` diff --git a/docs/msadapter/docs/source_zh_cn/msadapter_user_guide/llm.md b/docs/msadapter/docs/source_zh_cn/msadapter_user_guide/llm.md index eba0837823a1d6af2eefa19ac8be123204baae57..4d41af4e52d76b6038cce40bd162fb3f1b952ae0 100755 --- a/docs/msadapter/docs/source_zh_cn/msadapter_user_guide/llm.md +++ b/docs/msadapter/docs/source_zh_cn/msadapter_user_guide/llm.md @@ -8,6 +8,6 @@ 此外,在MindSpeed加速库的基础上也提供了大语言模型、多模态模型套件加速库,用户可以安装MSAdapter及配套昇腾软件直接使用: -1. 大语言模型库:[MindSpeed-LLM](https://gitee.com/ascend/MindSpeed-LLM/blob/master/docs/mindspore/quick_start.md) +1. 大语言模型库:[MindSpeed-LLM](https://gitee.com/ascend/MindSpeed-LLM/blob/master/docs/mindspore) 2. 多模态模型库:[MindSpeed-MM](https://gitee.com/ascend/MindSpeed-MM/blob/master/docs/mindspore/getting_start.md) \ No newline at end of file diff --git a/docs/msadapter/docs/source_zh_cn/msadapter_user_guide/quick_start.md b/docs/msadapter/docs/source_zh_cn/msadapter_user_guide/quick_start.md index 7c6a814e0d9196a0b2b83b4b766f8f11548f4ddb..0414f5e145d2bf55b342940921064ddc0610467a 100755 --- a/docs/msadapter/docs/source_zh_cn/msadapter_user_guide/quick_start.md +++ b/docs/msadapter/docs/source_zh_cn/msadapter_user_guide/quick_start.md @@ -2,7 +2,7 @@ [![查看源文件](https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/website-images/master/resource/_static/logo_source.svg)](https://gitee.com/mindspore/docs/blob/master/docs/msadapter/docs/source_zh_cn/msadapter_user_guide/quick_start.md) -本文将为用户提供快速指引,以一个MNIST手写数字识别任务的完整流程为例,说明如何使用MSAdatper。并将一个完整的PyTorch代码用例适配至MSAdapter。若用户想直接运行MSAdapter的例子,可参考[MSAdapter适配后代码](#msadapter适配后代码)。 +本文将为用户提供快速指引,以一个MNIST手写数字识别任务的完整流程为例,说明如何使用MSAdapter。并将一个完整的PyTorch代码用例适配至MSAdapter。若用户想直接运行MSAdapter的例子,可参考[MSAdapter适配后代码](#msadapter适配后代码)。 模型适配详细步骤如下: @@ -75,8 +75,7 @@ def main(): loss.backward() optimizer.step() # 添加每个step的打印,用户可自行修改 - print(type(loss)) - print(f"step == {step}") + print(f"step = {step}, loss : {loss}") step += 1 if __name__ == "__main__": @@ -137,19 +136,15 @@ train_dataset = datasets.MNIST(root='./data', train=True, download=True, transfo train_loader = DataLoader(train_dataset, batch_size=args.batch_size, shuffle=True) ``` -MSAdapter使用MNIST需要先自行下载数据集,尚未支持全部数据集。下载方案查看[MSAdapter适配后代码](#msadapter适配后代码)。 - ### 5. 模型构建 -#### torch.nn.Module.to() - MSAdapter在torch.nn.Module.to()调用上与PyTorch有差别。 ```python model = ToyModel().to('cuda') ``` -由于MSAdapter暂时不支持torch.nn.Module.to接口,需要转换为如下方式,MSAdapter默认将模型放置于NPU上。 +由于MSAdapter暂时不支持torch.nn.Module.to接口,需要转换为如下方式,MSAdapter默认将模型放置于NPU上。若用户希望将模型或者张量搬运至CPU,则需要调用.cpu()接口。 修改如下: @@ -180,7 +175,7 @@ for epoch in range(args.epochs): outputs = model(inputs) # 前向调用不同 loss = criterion(outputs, labels).to('cuda') # Tensor.to()问题 loss.backward() # 反向调用不同 - optimizer.step() # 优化器调用不同 + optimizer.step() step += 1 ``` @@ -202,7 +197,7 @@ loss = criterion(outputs, labels) #### 前向与反向计算 -由于MSAdapter使用了函数式微分,需要将模型封装为函数。用户除了修改代码,还需要导入MindSpore。 +由于MSAdapter使用了函数式微分,正向反向计算均要调用函数,所以需要将PyTorch模型封装为函数。用户除了修改代码,还需要导入MindSpore。 ```python outputs = model(inputs) # 前向调用不同 @@ -229,20 +224,7 @@ loss.backward() # 反向调用不同 loss, grads = grad_fn(inputs, labels) ``` -### MSAdapter适配后代码 - -请先下载好数据集: - -```shell -mkdir -p data/MNIST/raw -cd data/MNIST/raw -wget http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz -wget http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz -wget http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz -wget http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz -gunzip -k *.gz -cd ../../../ -``` +## MSAdapter适配后代码 此处提供MSAdapter可运行的代码: @@ -284,7 +266,7 @@ def main(): transforms.ToTensor(), transforms.Normalize((0.5,), (0.5,)) ]) - train_dataset = datasets.MNIST(root='./data', train=True, download=False, transform=transform) + train_dataset = datasets.MNIST(root='./data', train=True, download=True, transform=transform) # 加载数据集 train_loader = DataLoader(train_dataset, batch_size=args.batch_size, shuffle=True) # 将模型转移到NPU上 @@ -311,11 +293,41 @@ def main(): optimizer.step() # 添加每个step的打印,用户可自行修改 - print(f"step == {step}") + print(f"step = {step}, loss : {loss}") step += 1 if __name__ == "__main__": main() ``` -由于硬件不同的原因,两者实际的运行结果(如模型参数、loss等)会有出入。 \ No newline at end of file +## loss对比 + +由于硬件不同的原因,两者实际的运行结果(如模型参数、loss等)会有出入。 + +epoch=1时,一共937个step,loss如下: + +**PyTorch loss** + +```txt +step = 930, loss : 0.37795058 +step = 931, loss : 0.48661083 +step = 932, loss : 0.46579897 +step = 933, loss : 0.54568535 +step = 934, loss : 0.46733740 +step = 935, loss : 0.32921690 +step = 936, loss : 0.37337211 +step = 937, loss : 0.31820250 +``` + +**MSAdapter loss** + +```txt +step = 930, loss : 0.42702404 +step = 931, loss : 0.55013794 +step = 932, loss : 0.37097090 +step = 933, loss : 0.36169168 +step = 934, loss : 0.57616550 +step = 935, loss : 0.37290677 +step = 936, loss : 0.52857995 +step = 937, loss : 0.51202524 +```