Fix a bug in AsyncAllocator memory pools access setting.
BTW please send XLA PRs via github.com/openxla/xla, it backs the same files, and soon will be the only way to submit such PRs. > BTW please send XLA PRs via github.com/openxla/xla, it backs the same files, and soon will be the only way to submit such PRs.

XLA PR here: https://github.com/openxla/xla/pull/13106. @cheshire 
The original code uses the wrong parameter `i` for `cuDeviceCanAccessPeer()`, which can cause undefined behavior when `(*all_ids_)[i] != platform_device_id`, for example, virtual devices are used. Should use `(*all_ids_)[i].value()` to represent the previous pool id.

Also, add a judgment to skip the pool initialization process if it's already initialized previously. This can happen in some cases, such as when multiple virtual devices are created from one physical GPU, the virtual devices will actually share the same CUDA memory pool.