Repository: pytorch
Issue: [dynamo] enable export path to preserve a meaningful parameter name in the exported graph module
Labels: triaged,enhancement,oncall: pt2,module: dynamo

### 🚀 The feature, motivation and pitch

```python
import torch
import torch.nn as nn
import torch._dynamo as torchdynamo

class MyMod(torch.nn.Module):
    def __init__(self):
        super().__init__()
        self.register_buffer("running_mean", torch.zeros(3,))
        self.register_buffer("running_var", torch.zeros(3,))
        self.weight = nn.Parameter(torch.zeros(3), requires_grad=True)
        self.li = nn.Linear(3, 3)

    def forward(self, input):
        return (torch.batch_norm(input, self.li(self.weight), None, self.running_mean, self.running_var, False, 0.1, 1e-5, False)[0].cos(),)

m = MyMod()
m.eval()
input = torch.randn(2, 3, 1, 2)

print("before export", m)
em, _ = torchdynamo.export(m, input, aten_graph=True, tracing_mode="symbolic")
print("after export", em)
```
The above code produces the following output:
```
before export MyMod(
  (li): Linear(in_features=3, out_features=3, bias=True)
)
after export GraphModule()



def forward(self, orig_arg_0):
    arg0, = fx_pytree.tree_flatten_spec(([orig_arg_0], {}), self._in_spec)
    _param_constant0 = self._param_constant0
    t_default = torch.ops.aten.t.default(_param_constant0);  _param_constant0 = None
    _param_constant1 = self._param_constant1
    unsqueeze_default = torch.ops.aten.unsqueeze.default(_param_constant1, 0);  _param_constant1 = None
    mm_default = torch.ops.aten.mm.default(unsqueeze_default, t_default);  unsqueeze_default = t_default = None
    squeeze_dim = torch.ops.aten.squeeze.dim(mm_default, 0);  mm_default = None
    _param_constant2 = self._param_constant2
    add_tensor = torch.ops.aten.add.Tensor(squeeze_dim, _param_constant2);  squeeze_dim = _param_constant2 = None
    empty_memory_format = torch.ops.aten.empty.memory_format([0], dtype = torch.uint8, layout = torch.strided, device = device(type='cpu'))
    _tensor_constant0 = self._tensor_constant0
    _tensor_constant1 = self._tensor_constant1
    _native_batch_norm_legit_default = torch.ops.aten._native_batch_norm_legit.default(arg0, add_tensor, None, _tensor_constant0, _tensor_constant1, False, 0.1, 1e-05);  arg0 = add_tensor = _tensor_constant0 = _tensor_constant1 = None
    getitem = _native_batch_norm_legit_default[0]
    getitem_1 = _native_batch_norm_legit_default[1]
    getitem_2 = _native_batch_norm_legit_default[2];  _native_batch_norm_legit_default = None
    select_int = torch.ops.aten.select.int(getitem, 0, 0);  getitem = None
    cos_default = torch.ops.aten.cos.default(select_int);  select_int = None
    return pytree.tree_unflatten([cos_default], self._out_spec)
    
# To see more debug info, please use `graph_module.print_readable()`
```
We can see that when aten_graph=True, the information about module hierarchy and the parameter name is lost in the exported graph module: they are replaced by anonymous names such _param_constant or _tensor_constant.

### Alternatives

_No response_

### Additional context

_No response_

cc @ezyang @msaroufim @wconstab @bdhirsh @anijain2305 @zou3519 @voznesenskym @penguinwu @EikanWang @jgong5 @Guobing-Chen @XiaobingSuper @zhuhaozhe @blzheng @wenzhe-nrv @jiayisunx @chenyang78 @aakhundov @kadeng @soumith @ngimel