Cuda 9.2 CuDnn7.0 官方文档解读

本篇博客主要是解读官方的文档,预先的条件等,不涉及配置

如果想要安装的话,请看我下一篇博客

准备工作(下载)

Cuda Toolkit 9.2下载地址

国内下载慢,加速方法见之前博客:独家git加速

cuDNN 下载地址

用google账号登陆:选择需要的

选择第一个:

如果有疑问建议直接查看

官网说明-cuDNN安装手册

官方说明-Cuda安装手册

官方说明-tensorflow安装手册

Cuda9.2的支持

Cuda9.0的支持

显卡驱动重装

为了确信是否显卡驱动可以正常使用

CUDA安装

系统要求

  • 支持cuda的GPU
  • ubuntu16.04等受支持的Linux版本
  • NVIDIA CUDA工具包
  • 验证是否拥有支持cuda的GPU
lspci | grep -i nvidia

如果有显示,那么你的GPU就具备了CUDA功能。

  • 验证linux版本是否支持
uname -m && cat /etc/*release

得到以下显示:

x86_64

DISTRIB_ID=Ubuntu

DISTRIB_RELEASE=16.04

DISTRIB_CODENAME=xenial

DISTRIB_DESCRIPTION="Ubuntu 16.04.5 LTS"

NAME="Ubuntu"

VERSION="16.04.5 LTS (Xenial Xerus)"

ID=ubuntu

ID_LIKE=debian

PRETTY_NAME="Ubuntu 16.04.5 LTS"

VERSION_ID="16.04"

HOME_URL="http://www.ubuntu.com/"

SUPPORT_URL="http://help.ubuntu.com/"

BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"

VERSION_CODENAME=xenial

UBUNTU_CODENAME=xenial

  • 验证gcc
gcc --version

得到结果:

gcc (Ubuntu 4.9.3-13ubuntu2) 4.9.3

Copyright (C) 2015 Free Software Foundation, Inc.

This is free software; see the source for copying conditions. There is NO

warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

  • 验证内核

CUDA驱动程序要求在安装驱动程序时安装内核运行版本的内核头文件和开发包,以及重建驱动程序时。例如,如果您的系统运行内核版本3.17.4-301,则还必须安装3.17.4-301内核头文件和开发包。

虽然Runfile安装不执行包验证,但如果当前没有安装这些包的版本,则驱动程序的RPM和Deb安装将尝试安装内核头和开发包。但是,它将安装这些软件包的最新版本,这些软件包可能与您的系统正在使用的内核版本匹配,也可能不匹配。 因此,最好在安装CUDA驱动程序之前以及更改内核版本时手动确保安装正确版本的内核头文件和开发包。

可以通过运行以下命令找到系统正在运行的内核版本:

uname -r

安装符合当前的kernel的内核头文件和开发包:

sudo apt-get install linux-headers-$(uname -r)
  • 下载验证

可以通过将

(9.2)http://developer.nvidia.com/cuda-downloads/checksums

(9.0)https://developer.download.nvidia.com/compute/cuda/9.0/Prod/docs/sidebar/md5sum.txt

上发布的MD5校验和与下载文件的校验和进行比较来验证下载。如果任一校验和不同,则下载的文件已损坏,需要再次下载。

9.0的md5校验

7a00187b2ce5c5e350e68882f42dd507 cuda_9.0.176_384.81_linux.run
19369a391a7475cace0f3c377aebbecb cuda_9.0.176_mac.dmg
fca8046970f3e27539802aa0c06a3158 cuda_9.0.176_mac_network.dmg
ecba5d6c7d86ab5c3c3be97330ca85a0 cuda_9.0.176_win10.exe
019d6e230bccef462fd0d7af61238c35 cuda_9.0.176_win10_network.exe
48d85427ddb4c0eae8ee46aea9d3126e cuda_9.0.176_windows.exe
8acb5a71367f83d7838723385742342f cuda_9.0.176_windows_network.exe
be0f029e95881adc28cc31381207b522 cuda_cluster_pkgs_9.0.176_rhel6.tar.gz
d0c6a642bd0f0367f90924704226e8c0 cuda_cluster_pkgs_9.0.176_rhel7.tar.gz
95a0042baddd9a5a265e5266f45a5d17 cuda_cluster_pkgs_9.0.176_ubuntu1604.tar.gz
d76d08b6da82e54326851d43435a0c61 cuda-repo-fedora25-9.0.176-1.x86_64.rpm
a58a6f09f8a1d56f5e6da1d87460e867 cuda-repo-fedora25-9-0-local-9.0.176-1.x86_64.rpm
918c8a71a00f89c5a733ef58011ad65c cuda-repo-opensuse422-9.0.176-1.x86_64.rpm
91f5e497e119ac22d9dfa6af1a117b47 cuda-repo-opensuse422-9-0-local-9.0.176-1.x86_64.rpm
4a1114e243d0e0908495d1ad6c92c239 cuda-repo-rhel6-9.0.176-1.x86_64.rpm
43e548a51e3705dd51d21b9926208600 cuda-repo-rhel6-9-0-local-9.0.176-1.x86_64.rpm
f9b8e8c0de6863e7cb1ca47c5d9b8589 cuda-repo-rhel7-9.0.176-1.ppc64le.rpm
960afa71b11da89980990736c77e0495 cuda-repo-rhel7-9.0.176-1.x86_64.rpm
8c9d14558cf63e077a61bf78a5bcfb2a cuda-repo-rhel7-9-0-local-9.0.176-1.ppc64le.rpm
f78a97891c183c47b0cc187a76eaa715 cuda-repo-rhel7-9-0-local-9.0.176-1.x86_64.rpm
dc2784693028df4855db8b31b3937c24 cuda-repo-sles122-9.0.176-1.x86_64.rpm
c7a2664834c20cfe75f2d1956fc87ae8 cuda-repo-sles122-9-0-local-9.0.176-1.x86_64.rpm
4b8004dd747dbb664e85b17dec3fee51 cuda-repo-ubuntu1604_9.0.176-1_amd64.deb
70e7d1027e225043678e7150f7a6fd7b cuda-repo-ubuntu1604_9.0.176-1_ppc64el.deb
e78e6ff56582f09a0cbc607049bdb2fd cuda-repo-ubuntu1604-9-0-local_9.0.176-1_amd64.deb
405d20e594b87f44fb8ed3b137e88707 cuda-repo-ubuntu1604-9-0-local_9.0.176-1_ppc64el.deb
3544486e0b99e633572a65bfb24058ed cuda-repo-ubuntu1704_9.0.176-1_amd64.deb
d717d6649cbf90d32e3fd2c0c7202be0 cuda-repo-ubuntu1704-9-0-local_9.0.176-1_amd64.deb

9.2的MD5校验:

8254739a33574820ff27628453fe33f3 cuda_9.2.64_mac.dmg
be64422cf5c0bd2cfaa46da7846ac69b cuda_9.2.64_mac_network.dmg
dd6e33e10d32a29914b7700c7b3d1ca0 cuda_9.2.88_396.26_linux.run
af15dd3f975786f458532f3e76ddabb8 cuda_9.2.88_win10.exe
078adfc1368a4574f707f740cab0f7d0 cuda_9.2.88_win10_network.exe
d087c023d2a2228b1677f574267b7dde cuda_9.2.88_windows.exe
5580c6cc8fcdcfbff57c26eae8c314d4 cuda_9.2.88_windows_network.exe
155f07336f25e6fda0a4cabe089d1714 cuda_cluster_pkgs_9.2.88_rhel6.tar.gz
b08c07f824a42562a8381fb41a4f908d cuda_cluster_pkgs_9.2.88_rhel7.tar.gz
92953b1d3693651acb752fa28f0cc6dc cuda_cluster_pkgs_9.2.88_ubuntu1604.tar.gz
4843e002fd0cb5055d9c39cd00694206 cuda-repo-fedora27-9.2.88-1.x86_64.rpm
ee2ac2f7fe6a5aad34ac2d531d0731a4 cuda-repo-fedora27-9-2-local-9.2.88-1.x86_64.rpm
ab95956ffd611a7ebb38f550852fc309 cuda-repo-opensuse423-9.2.88-1.x86_64.rpm
bc0d7fbf211a4b5a07b4a3b63cc89c10 cuda-repo-opensuse423-9-2-local-9.2.88-1.x86_64.rpm
eec36b2c075269665e41149ea6c67fe6 cuda-repo-rhel6-9.2.88-1.x86_64.rpm
1340694af5858c9bd509315dd5b1266c cuda-repo-rhel6-9-2-local-9.2.88-1.x86_64.rpm
1121b80c9a16d58d009c042056482fb0 cuda-repo-rhel7-9.2.88-1.ppc64le.rpm
7bf25a80b002511501af8f555f384f86 cuda-repo-rhel7-9.2.88-1.x86_64.rpm
48f44700fbe87ba54f727bd5ddd89718 cuda-repo-rhel7-9-2-local-9.2.88-1.ppc64le.rpm
c16d67b69f491053534abbdd35bf9696 cuda-repo-rhel7-9-2-local-9.2.88-1.x86_64.rpm
12a708a88fbd4f99c40f001794ff585b cuda-repo-sles123-9.2.88-1.x86_64.rpm
35dbcab7f84106673e3f1345ba3eede1 cuda-repo-sles123-9-2-local-9.2.88-1.x86_64.rpm
62937c222edc19cb49df06978348fea8 cuda-repo-ubuntu1604_9.2.88-1_amd64.deb
50fb1ccc35e098ff4499cbf954d66bcf cuda-repo-ubuntu1604_9.2.88-1_ppc64el.deb
3d3e8b7920780e35b839811cc9dd5b46 cuda-repo-ubuntu1604-9-2-local_9.2.88-1_amd64.deb
465cf1ddd9d6cc186edd6f5d7c96711f cuda-repo-ubuntu1604-9-2-local_9.2.88-1_ppc64el.deb
5cbe16157b4941289ca3eb5406633f23 cuda-repo-ubuntu1710_9.2.88-1_amd64.deb
1a5da1a97cbd322f91e87df565a7f669 cuda-repo-ubuntu1710-9-2-local_9.2.88-1_amd64.deb
2e222e145ef3232912679fa03a320c24 cuda_9.2.64.1_mac.dmg
0e615d99152b9dfce5da20dfece6b7ea cuda_9.2.88.1_linux.run
4e1a26062537287e0edb653c40a1cc29 cuda_9.2.88.1_windows.exe
bb7ecdbac12aa2e7b485611901d1a7eb cuda-repo-fedora27-9-2-local-cublas-update-1-1.0-1.x86_64.rpm
3125beed3d35629dbc1046fbf9505707 cuda-repo-opensuse423-9-2-local-cublas-update-1-1.0-1.x86_64.rpm
54fe8c72d4d8f7731ad8e52fd1040342 cuda-repo-rhel6-9-2-local-cublas-update-1-1.0-1.x86_64.rpm
b579c048ad60d79daa0eaf25733b212a cuda-repo-rhel7-9-2-local-cublas-update-1-1.0-1.ppc64le.rpm
783b48d12726130d6e1b3ac5d4511bac cuda-repo-rhel7-9-2-local-cublas-update-1-1.0-1.x86_64.rpm
c581b59f0e724b7936e4c099aa72cba2 cuda-repo-sles123-9-2-local-cublas-update-1-1.0-1.x86_64.rpm
0ad9c90134f1fc2e8eb249256855c21a cuda-repo-ubuntu1604-9-2-local-cublas-update-1_1.0-1_amd64.deb
d1761f5229b96d2fe4b8fc9654fed928 cuda-repo-ubuntu1604-9-2-local-cublas-update-1_1.0-1_ppc64el.deb
9d1174a17f0721dc520c2c6775eba342 cuda-repo-ubuntu1710-9-2-local-cublas-update-1_1.0-1_amd64.deb

要计算下载文件的MD5校验和,请运行以下命令:

$ md5sum <file>

我下载的是cuda-repo-ubuntu1604-9-0-local_9.0.176-1_amd64.deb,所以用到的校验码为d717d6649cbf90d32e3fd2c0c7202be0,如果你下载的是cuda_9.0.176_384.81_linux.run,那么对应的校验码是7a00187b2ce5c5e350e68882f42dd507

处理之前安装的cuda文件

之前安装的版本会对现有版本造成冲突,需要卸载

Use the following command to uninstall a Toolkit runfile installation:

$ sudo /usr/local/cuda-X.Y/bin/uninstall_cuda_X.Y.pl

Use the following command to uninstall a Driver runfile installation:

$ sudo /usr/bin/nvidia-uninstall

Use the following commands to uninstall a RPM/Deb installation:

$ sudo yum remove <package_name>                      # Redhat/CentOS
$ sudo dnf remove <package_name> # Fedora
$ sudo zypper remove <package_name> # OpenSUSE/SLES
$ sudo apt-get --purge remove <package_name> # Ubuntu

下载的deb安装过程

Installation Instructions(下载界面提供):

sudo dpkg -i cuda-repo-ubuntu1604-9-0-local_9.0.176-1_amd64.deb

sudo apt-key add /var/cuda-repo-<version>/7fa2af80.pub

sudo apt-get update

sudo apt-get install cuda

官方说明提供:

  1. 安装元数据
sudo dpkg -i cuda-repo-<distro>_<version>_<architecture>.deb
  1. 安装公钥

使用本地仓库进行安装时:

$ sudo apt-key add /var/cuda-repo-<version>/7fa2af80.pub

使用网络仓库安装时:

$ sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/<distro>/<architecture>/7fa2af80.pub
  1. 更新apt存储库缓存
sudo apt-get update
  1. 安装cuda
sudo apt-get install cuda

下载的runfile的安装过程

  • 卸载已有的NVIDIA驱动(可选):sudo apt-get remove --purge nvidia*

    一些开发需要的包(可选):
sudo apt-get install build-essential
sudo apt-get install vim cmake git
sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libboost-all-dev libhdf5-serial-dev
  • 屏蔽nouveau,sudo vim /etc/modprobe.d/blacklist-nouveau.conf,加入
blacklist nouveau
blacklist lbm-nouveau
options nouveau modeset=0
alias nouveau off
alias lbm-nouveau off
  • 禁用 nouveau 内核模块
echo options nouveau modeset=0 | sudo tee -a /etc/modprobe.d/nouveau-kms.conf
sudo update-initramfs -u

重启计算机 sudo reboot

  • 临时关闭图形界面
sudo service lightdm stop
  • 执行安装(注意参数,不安装opengl-lib)
sudo sh cuda_<version>_linux.run --override --no-opengl-lib
Do you accept the previously read EULA? (accept/decline/quit): accept
Install NVIDIA Accelerated Graphics Driver for Linux-x86_64? ((y)es/(n)o/(q)uit): y
Install the CUDA Toolkit? ((y)es/(n)o/(q)uit): y
Enter Toolkit Location [ default is /usr/local/cuda-9.1 ]:
Do you want to install a symbolic link at /usr/local/cuda? ((y)es/(n)o/(q)uit): y
Install the CUDA Samples? ((y)es/(n)o/(q)uit): y
Enter CUDA Samples Location [ default is /home/user ]:

如果安装没有报错,重启使驱动生效。检查驱动状态: nvidia-smi

  • 修改环境变量: (可编辑 .bashrc 或 /etc/profile 文件)
$ export PATH=/usr/local/cuda-9.1/bin${PATH:+:${PATH}}
$ export LD_LIBRARY_PATH=/usr/local/cuda-9.1/lib64 ${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

编译运行CUDA测试用例(自行查看官方说明)。

安装完以后的操作

The PATH variable needs to include /usr/local/cuda-9.0/bin

To add this path to the PATH variable:

$ export PATH=/usr/local/cuda-9.0/bin${PATH:+:${PATH}}

In addition, when using the runfile installation method, the LD_LIBRARY_PATH variable needs to contain /usr/local/cuda-9.0/lib64 on a 64-bit system, or /usr/local/cuda-9.0/lib on a 32-bit system

  • To change the environment variables for 64-bit operating systems:

    $ export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64\
    ${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
  • To change the environment variables for 32-bit operating systems:

    $ export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib\
    ${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

Note that the above paths change when using a custom install path with the runfile installation method.

验证安装

  • 验证驱动版本

When the driver is loaded, the driver version can be found by executing the command

$ cat /proc/driver/nvidia/version
  • 编译例子进行测试

The version of the CUDA Toolkit can be checked by running nvcc -V in a terminal window. The nvcc command runs the compiler driver that compiles CUDA programs. It calls the gcc compiler for C code and the NVIDIA PTX compiler for the CUDA code.

The NVIDIA CUDA Toolkit includes sample programs in source form. You should compile them by changing to ~/NVIDIA_CUDA-9.0_Samples and typing make. The resulting binaries will be placed under ~/NVIDIA_CUDA-9.0_Samples/bin.

  • 运行二进制文件

编译后,找到并运行 DEVICEQUERY 下 〜/ NVIDIA_CUDA- 9.0 _Samples

from the command line as the superuser.

Running the bandwidthTest program ensures that the system and the CUDA-capable device are able to communicate correctly.

继续安装cuDNN

Unzip the cuDNN package.

$ tar -xzvf cudnn-<>.tgz

Copy the following files into the CUDA Toolkit directory.(注意路径)

$ sudo cp cuda/include/cudnn.h /usr/local/cuda/include
$ sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64
$ sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*

编译运行CUDA测试用例(自行查看官方说明)

解决问题的思路

主要问题:NVIDIA驱动装不上(或者装完图形界面出现问题)、驱动装上了但和CUDA要求的版本不匹配

  1. 谨慎使用最新版NVIDIA驱动和Ubuntu自带的附加驱动
  2. 建议使用CUDA自带的GPU驱动程序,不建议单独安装驱动程序
  3. 建议参考官方教程进行安装
  4. 旧版教程参考意义不大
  5. 建议关掉图形界面进行安装

Trouble Shootting

  1. 安装过程出现 "The driver installation is unable to locate the kernel source. ",使用uname -r查看内核版本,如果高于4.10,如4.13.0,CUDA 9.1自带驱动不支持最新Linux内核,请降级内核:

    sudo apt-get purge linux-image-4.13.0-26-generic
    sudo apt-get purge linux-headers-4.13.0-26-generic

    Update initramfs image:

    sudo update-initramfs -u

    重启,使用 uname -r 命令确保内核版本正确

  2. 如果确认内核版本没问题了,还出现(1)的问题,再尝试安装以下包:

    apt-get install linux-source
    apt-get source linux-image-$(uname -r)
    apt-get install linux-headers-$(uname -r)

Tensorflow版本对应情况

Reference

官网说明-cuDNN安装手册

官方说明-Cuda安装手册9.2

cuda9.0

官方说明-tensorflow安装手册

比较新的博客

规整的博客,赞赞了

版本对应问题

Cuda安装与测试

卸载原有CUDA安装更高版本CUDA

更改Cudnn版本

如何查看ubuntu下显卡是否已经成功安装

Install NVIDIA Driver and CUDA.md

NVIDIA驱动安装

快速搭建深度学习环境上

快速搭建深度学习环境下

Later

安装caffe2

install caffe2 with anaconda

安装facebook最新的网络

老师推荐博客

Cuda 9.2 CuDnn7.0 官方文档解读的更多相关文章

  1. Django 2.0官方文档中文 渣翻 总索引(个人学习,欢迎指正)

    Django 2.0官方文档中文 渣翻 总索引(个人学习,欢迎指正) 置顶 2017年12月08日 11:19:11 阅读数:20277 官方原文: https://docs.djangoprojec ...

  2. Django 2.0官方文档中文 总索引

    Django 2.0官方文档中文 渣翻 总索引 翻译 2017年12月08日 11:19:1 官方原文: https://docs.djangoproject.com/en/2.0/ 当前翻译版本:  ...

  3. Vue2.0 官方文档学习笔记

    VUE2.0官方文档 基础部分: 1.VUE简介 Vue是一个基于MVVM的框架,其中M代表数据处理层,V代表视图层即我们在Vue组件中的html部分,VM即M和V的结合层,处理M层相应的逻辑数据,在 ...

  4. Orleans 框架3.0 官方文档中文版系列一 —— 概述

    关于这个翻译文档的一些说明: 之前逛博客园的时候,看见有个园友在自己的博客上介绍Orleans. 觉得Orleans 是个好东西. 当时心想:如果后面有业务需要的时候可以用用Orleans框架. 当真 ...

  5. vue.js 2.0 官方文档学习笔记 —— 01. vue 介绍

    这是我的vue.js 2.0的学习笔记,采取了将官方文档中的代码集中到一个文件的形式.目的是保存下来,方便自己查阅. !官方文档:https://cn.vuejs.org/v2/guide/ 01. ...

  6. Elasticsearch 7.4.0官方文档操作

    官方文档地址 https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html 1.0.0 设置Elasticsea ...

  7. FluentValidation:C#后端输入验证框架的官方文档解读

    参照 FluentValidation 的官方文档写的例子,方便日后查看和使用. 原文:https://github.com/JeremySkinner/FluentValidation/wiki H ...

  8. 【Java架构:基础技术】一篇文章搞掂:Spring Boot 官方文档解读

    本文篇幅较长,建议合理利用右上角目录进行查看(如果没有目录请刷新). 本文内容大部分是翻译和总结官方文档,可以到https://docs.spring.io/spring-boot/docs查看(此地 ...

  9. Spark2.1.0官方文档

    Spark 概述 Apache Spark是一个快速和通用的集群计算系统.它提供Java,scala,Python.R语言的APIs,以及支持一般执行图形的优化引擎. 它还支持一组丰富的高级工具,包括 ...

随机推荐

  1. 【黑金ZYNQ7000系列原创视频教程】05.FPGA和ARM的初次结合——LED实验

    黑金论坛地址: http://www.heijin.org/forum.php?mod=viewthread&tid=36639&extra=page%3D1 爱奇艺地址: http: ...

  2. 安装Hadoop系列 — 安装SSH免密码登录

    配置ssh免密码登录   1) 验证是否安装ssh:ssh -version显示如下的话则成功安装了OpenSSH_6.2p2 Ubuntu-6ubuntu0.1, OpenSSL 1.0.1e 11 ...

  3. 【BZOJ4424】Cf19E Fairy DFS树

    [BZOJ4424]Cf19E Fairy Description 给定 n 个点,m 条边的无向图,可以从图中删除一条边,问删除哪些边可以使图变成一个二分图. Input 第 1 行包含两个整数 n ...

  4. c# 对数据库的操作

    1.首先需要引用 using System.Data.SqlClient; 2.创建连接 SqlConnection connection = new SqlConnection(); connect ...

  5. linux 下 安装go

    首先肯定是下载资源包了,链接汇总在http://www.golangtc.com/download,我用的是 http://www.golangtc.com/static/go/go1.4beta1. ...

  6. tensorflow和python操作中的笔记

    前一段时间做了一些项目,把一些笔记放在了txt中,现分享出来,自己也能够时长预习. 1) 读取文件时,将固定的文件地址,采用数组或者字符串的形式,提前表示出来,后期使用时候采用拼接操作 2) # 得到 ...

  7. Python爬虫基础(一)urllib2库的基本使用

    爬虫也就是所谓的网络数据采集,是一种通过多种手段收集网络数据的方式,不光是通过与 API 交互(或者直接与浏览器交互)的方式.最常用的方法是写一个自动化程序向网络服务器请求数据(通常是用 HTML 表 ...

  8. 关于Python装饰器内层函数为什么要return目标函数的一些个人见解

    https://blog.csdn.net/try_test_python/article/details/80802199 前几天在学装饰器的时候,关于装饰器内层函数调用目标函数时是否return目 ...

  9. 12.GIT多人协作

    当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin. 查看远程库的信息 $ git remote origin $ ...

  10. Day06 DOM4J&schema介绍&xPath

    day06总结 今日内容 XML解析之JAXP( SAX ) DOM4J Schema   三.XML解析器介绍   操作XML文档概述   1 如何操作XML文档 XML文档也是数据的一种,对数据的 ...